34,590
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE TB(TID VARCHAR(5),CLASSID VARCHAR(5),KINDID VARCHAR(5),PRICE NUMERIC(9,2))
INSERT INTO TB
SELECT '01','1','A',92.10 UNION ALL
SELECT '01','2','C',10.00 UNION ALL
SELECT '01','1','A',1.00 UNION ALL
SELECT '02','2','E',8.10
go
DECLARE @s NVARCHAR(2000),@i NVARCHAR(2)
SET @s='select TID'
SELECT @s=@s+',[KINDID'+RTRIM(CLASSID)+']=max(case when CLASSID='+RTRIM(CLASSID)+' then KINDID else '''' end),[PRICE'+RTRIM(CLASSID)+']=sum(case when CLASSID='+RTRIM(CLASSID)+' then PRICE else 0 end)'
FROM TB GROUP BY CLASSID
exec (@s+' from TB group by TID')
/*
TID KINDID1 PRICE1 KINDID2 PRICE2
01 A 93.10 C 10.00
02 0.00 E 8.10
*/
DECLARE @TB TABLE (TID VARCHAR(5),CLASSID VARCHAR(5),KINDID VARCHAR(5),PRICE NUMERIC(9,2))
INSERT INTO @TB
SELECT '01','1','A',92.10 UNION ALL
SELECT '01','2','C',10.00 UNION ALL
SELECT '01','1','A',1.00 UNION ALL
SELECT '02','2','E',8.10
SELECT
TID,
[1_KIND]=max(CASE WHEN CLASSID=1 THEN KINDID ELSE '' end),
[1_PRICE]=max(CASE WHEN CLASSID=1 THEN price ELSE 0 end),
[2_KIND]=max(CASE WHEN CLASSID=2 THEN KINDID ELSE '' end),
[2_PRICE]=max(CASE WHEN CLASSID=2 THEN price ELSE 0 END)
FROM
(
SELECT TID,CLASSID,KINDID,SUM(PRICE) AS price FROM
@TB GROUP BY TID,CLASSID,KINDID
)a GROUP BY TID
/*
TID 1_KIND 1_PRICE 2_KIND 2_PRICE
----- ------ --------------------------------------- ------ ---------------------------------------
01 A 93.10 C 10.00
02 0.00 E 8.10
*/
SELECT
TID,
max(CASE WHEN CLASSID=1 THEN KINDID ELSE '' END) AS [1_KIND],
max(CASE WHEN CLASSID=1 THEN PRICE ELSE 0 END) AS [1_PRICE],
max(CASE WHEN CLASSID=2 THEN KINDID ELSE '' END) AS [2_KIND],
max(CASE WHEN CLASSID=2 THEN PRICE ELSE 0 END) AS [2_PRICE]
FROM (SELECT TID,CLASSID,KINDID,SUM(PRICE) AS PRICE FROM @TB GROUP BY TID,CLASSID,KINDID)t
GROUP BY TID
DECLARE @TB TABLE (TID VARCHAR(5),CLASSID VARCHAR(5),KINDID VARCHAR(5),PRICE NUMERIC(9,2))
INSERT INTO @TB
SELECT '01','1','A',92.10 UNION ALL
SELECT '01','2','C',10.00 UNION ALL
SELECT '01','1','A',1.00 UNION ALL
SELECT '02','2','E',8.10
select tid,
max(case when classid=1 then kindid else '' end)[1_KIND],
SUM(case when classid=1 then price else 0 end)[1_PRICE],
max(case when classid=2 then kindid else '' end)[2_KIND],
SUM(case when classid=2 then price else 0 end)[2_PRICE]
from @TB
group by tid
/*
tid 1_KIND 1_PRICE 2_KIND 2_PRICE
----- ------ --------------------------------------- ------ ---------------------------------------
01 A 93.10 C 10.00
02 0.00 E 8.10
(2 行受影响)
*/