Sql 使用两个组,是否可以将第二个组拆分为列?
我有一个类似的查询:Sql 使用两个组,是否可以将第二个组拆分为列?,sql,sql-server,pivot,Sql,Sql Server,Pivot,我有一个类似的查询: SELECT dateadd(DAY,0, datediff(day,0, archivedate)) as day, COUNT(*) item_value, item_metadata.item_label FROM item_values join item_metadata on item_values.md_ID= item_metadata.Id group by dateadd(DAY,0, datediff(day,0, archiveda
SELECT dateadd(DAY,0, datediff(day,0, archivedate)) as day,
COUNT(*) item_value,
item_metadata.item_label
FROM item_values
join item_metadata on item_values.md_ID= item_metadata.Id
group by dateadd(DAY,0, datediff(day,0, archivedate)), item_label
order by dateadd(DAY,0, datediff(day,0, archivedate)) desc
这将生成如下所示的数据:
day item_value item_label
2020-03-31 8 orange
2020-03-31 2 black
2020-03-30 28 green
2020-03-30 1 blue
2020-03-30 59 orange
2020-03-29 11 black
2020-03-29 1 blue
2020-03-29 15 green
2020-03-29 4 orange
我想让它看起来像这样:
day orange black green blue
2020-03-31 8 2 0 0
2020-03-30 59 0 28 1
2020-03-29 4 11 15 1
这在SQL Server中可能吗
我基本上希望最终将数据可视化为一个堆叠的图表
解决
根据下面发布的其他链接,我找到的解决方案是:
declare
@cols nvarchar(max),
@stmt nvarchar(max)
select @cols = isnull(@cols + ', ', '') + '[' + T.item_label + ']' from (select distinct item_label from item_metadata where Active=1) as T
select @stmt = '
select * from (SELECT dateadd(DAY,0, datediff(day,0, archivedate)) as [day],
COUNT(*) as item_value,
item_label
FROM item_values
join item_metadata on item_values.md_ID= item_metadata.Id
where Ignored=0 group by dateadd(DAY,0, datediff(day,0, archivedate)),item_label ) Visits
pivot(sum(item_value) for item_metadata
in (' + @cols + ') ) as pivottable order by day desc
'
exec sp_executesql @stmt = @stmt
您可能正在寻找动态数据透视查询
DECLARE
@columns NVARCHAR(MAX) = '',
@sql NVARCHAR(MAX) = '';
SELECT @columns += QUOTENAME(item_label) + ','
From (SELECT DISTINCT item_label
FROM #a) A
-- remove the last comma
SET @columns = LEFT(@columns, LEN(@columns) - 1);
SET @sql = 'SELECT *
FROM ( SELECT day,item_value,item_label
FROM #a) src
PIVOT( MAX([item_value]) FOR item_label IN ('+ @columns +')) AS pivot_table;';
-- execute the dynamic SQL
EXECUTE sp_executesql @sql;
输出
您想
透视数据。请检查此示例。-->是的,这正是我需要的