34,590
社区成员
发帖
与我相关
我的任务
分享
;with A as
(
select '1' as 账号
,'A' as 产品代码
,100 as 产品市值
union all
select '1' as 账号
,'B' as 产品代码
,50 as 产品市值
union all
select '2' as 账号
,'A' as 产品代码
,200 as 产品市值
union all
select '3' as 账号
,'A' as 产品代码
,100 as 产品市值
union all
select '3' as 账号
,'B' as 产品代码
,80 as 产品市值
union all
select '4' as 账号
,'C' as 产品代码
,10 as 产品市值
)
select *
from A
SELECT @SQL=ISNULL(@SQL+',','')+'['+ITEM_CODE+']'
FROM (SELECT DISTINCT ITEM_CODE FROM #T) AS A
CREATE TABLE #T
(ACCOUNT_ID VARCHAR(10),
ITEM_CODE VARCHAR(10),
VALUE INT)
INSERT INTO #T
select '1' as 账号
,'A' as 产品代码
,100 as 产品市值
union all
select '1' as 账号
,'B' as 产品代码
,50 as 产品市值
union all
select '2' as 账号
,'A' as 产品代码
,200 as 产品市值
union all
select '3' as 账号
,'A' as 产品代码
,100 as 产品市值
union all
select '3' as 账号
,'B' as 产品代码
,80 as 产品市值
union all
select '4' as 账号
,'C' as 产品代码
,10 as 产品市值
DECLARE @SQL VARCHAR(8000)
SELECT @SQL=ISNULL(@SQL+',','')+'['+ITEM_CODE+']'
FROM (SELECT DISTINCT ITEM_CODE FROM #T) AS A
SET @SQL='SELECT *
FROM #T
PIVOT (SUM(VALUE) FOR ITEM_CODE IN ('+@SQL+')) AS B'
EXEC(@SQL)
SELECT * FROM A /*数据源*/
AS P
PIVOT
(
SUM(产品市值 /*行转列后 列的值*/) FOR
p.产品代码 /*需要行转列的列*/ IN ([A],[B],[C])/*列的值*/
) AS T
得到结果:
账号 A B C
1 100 50 NULL
2 200 NULL NULL
3 100 80 NULL
4 NULL NULL 10
但我不知道怎么把语句中的
[A],[B],[C]
用动态语句表达出来,其实产品代码范围就是:
select distinct(产品代码) from A