消除数据中心的口是心非 table
evit duplicity in pivot table
我创建了一个 T-SQL 代码来接收这样的数据:
但是当数据位于不同的列(COL1、COL2、COL3、COL5、....)时,这会导致 CODART 和 NOMBRE 重复
我想将所有数据显示在一行中,如下所示:
这是我的代码:
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'
SELECT *
FROM
(
SELECT sum(CUENTA) [cuenta], CODIGO,(select max(ar.nombre) from
CON.dbo.ARTICULOS ar where ar.codart=a.Codigo) as NOMBRE,
COL from LIBRO_COLUMNA l group by COL,CODIGO,
) AS j
PIVOT
(
SUM(cuenta) FOR COL IN('+@columns+')
) AS pivottable ORDER BY CODIGO;';
--PRINT @sql;
exec sp_executesql @sql
table的结构和一些数据:
COL codigo nombre Cuenta
*--------------------------------------------------------------------
COL5 | PHOBA802 | TAPA FINAL D-UT 2,5/10 | 3624.00
COL 5 | PHOBA8021 | TAPA FINAL D-UT 16 | 159.00
COL 5 | PHOBA803 | TAPA FINAL D-UT 2,5/4 | 1950.00
COL 10 | PHOBA803 | | 447.00
COL 1 | PHOBA803 | TAPA UT 2,5-4 | 138.00
这里的问题是,如果想要一个带有 COL 的支点,我需要按 CODIGO 和 COL 分组,我不知道两个不按 COL 分组就可以做到这一点。
有什么建议吗?
这样的怎么样?
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'
SELECT
subquery.*
, (select max(ar.nombre) from
CON.dbo.ARTICULOS ar where ar.codart=subquery.Codigo) as NOMBRE
FROM
(
SELECT *
FROM
(
SELECT sum(CUENTA) [cuenta],
COL from LIBRO_COLUMNA l group by COL,CODIGO
) AS j
PIVOT
(
SUM(cuenta) FOR COL IN('+@columns+')
) AS pivottable
) subquery ORDER BY subquery.CODIGO;
';
--PRINT @sql;
exec sp_executesql @sql
----稍后添加----
关于原因的更多解释。
在 T-SQL Fundamental 和准备 70-461 考试的文本中,Itzik Ben-Gan 解释了 PIVOT。
SELECT <select list>
FROM (
SELECT
<grouping column>
, <spreading column>
, <aggregating column>
) PIVOT ( <aggregate function> (<aggregation column>)
FOR <spreading column> IN (<spreading values>) ) as P;
根据我对他写作的理解,通过在 (select max...) 行中添加,您在其中添加了一个分组列
(将分组视为 ... GROUP BY 分组列、展开列的一部分)。
在这种情况下,我将 (select max...) 行从要旋转的 table 中移出,因此删除了重复项。
我创建了一个 T-SQL 代码来接收这样的数据:
但是当数据位于不同的列(COL1、COL2、COL3、COL5、....)时,这会导致 CODART 和 NOMBRE 重复
我想将所有数据显示在一行中,如下所示:
这是我的代码:
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'
SELECT *
FROM
(
SELECT sum(CUENTA) [cuenta], CODIGO,(select max(ar.nombre) from
CON.dbo.ARTICULOS ar where ar.codart=a.Codigo) as NOMBRE,
COL from LIBRO_COLUMNA l group by COL,CODIGO,
) AS j
PIVOT
(
SUM(cuenta) FOR COL IN('+@columns+')
) AS pivottable ORDER BY CODIGO;';
--PRINT @sql;
exec sp_executesql @sql
table的结构和一些数据:
COL codigo nombre Cuenta
*--------------------------------------------------------------------
COL5 | PHOBA802 | TAPA FINAL D-UT 2,5/10 | 3624.00
COL 5 | PHOBA8021 | TAPA FINAL D-UT 16 | 159.00
COL 5 | PHOBA803 | TAPA FINAL D-UT 2,5/4 | 1950.00
COL 10 | PHOBA803 | | 447.00
COL 1 | PHOBA803 | TAPA UT 2,5-4 | 138.00
这里的问题是,如果想要一个带有 COL 的支点,我需要按 CODIGO 和 COL 分组,我不知道两个不按 COL 分组就可以做到这一点。
有什么建议吗?
这样的怎么样?
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'
SELECT
subquery.*
, (select max(ar.nombre) from
CON.dbo.ARTICULOS ar where ar.codart=subquery.Codigo) as NOMBRE
FROM
(
SELECT *
FROM
(
SELECT sum(CUENTA) [cuenta],
COL from LIBRO_COLUMNA l group by COL,CODIGO
) AS j
PIVOT
(
SUM(cuenta) FOR COL IN('+@columns+')
) AS pivottable
) subquery ORDER BY subquery.CODIGO;
';
--PRINT @sql;
exec sp_executesql @sql
----稍后添加----
关于原因的更多解释。
在 T-SQL Fundamental 和准备 70-461 考试的文本中,Itzik Ben-Gan 解释了 PIVOT。
SELECT <select list>
FROM (
SELECT
<grouping column>
, <spreading column>
, <aggregating column>
) PIVOT ( <aggregate function> (<aggregation column>)
FOR <spreading column> IN (<spreading values>) ) as P;
根据我对他写作的理解,通过在 (select max...) 行中添加,您在其中添加了一个分组列 (将分组视为 ... GROUP BY 分组列、展开列的一部分)。
在这种情况下,我将 (select max...) 行从要旋转的 table 中移出,因此删除了重复项。