我创建了一个T代码来接收如下数据:

但是,当数据位于不同的列(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表的结构和一些数据:
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分组的方法。
有什么建议吗?
发布于 2016-11-24 13:00:38
像这样的怎么样?
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-后来加上
更多关于原因的解释。
在文本的text基础和一个为70-461考试做准备的时候,Itzik解释了支点.
SELECT <select list>
FROM (
SELECT
<grouping column>
, <spreading column>
, <aggregating column>
) PIVOT ( <aggregate function> (<aggregation column>)
FOR <spreading column> IN (<spreading values>) ) as P;根据我对他写作的理解,在(选择最大.)行,您在其中添加了一个分组列(将分组作为.按分组列、展开列分组)。
在这种情况下,我移动了(选择max.)从正在旋转的表中划出一行,从而删除重复。
https://stackoverflow.com/questions/40784667
复制相似问题