所以,我一直遇到这个问题,我想我太过分了。我有一个我需要数据的数据库。这一切都很好。但是我遇到问题的地方是我需要将它存储为只有2行,一行用于所有日期,一行用于计数。这是一个例子:
obj_name | date_made
--------------------
1 | 2016-3-04
2 | 2016-5-23
3 | 2016-5-23
4 | 2016-5-23
5 | 2016-6-07
6 | 2016-6-07
7 | 2016-6-07
8 | 2016-6-07
9 | 2016-9-12
10 | 2016-9-12
我想要的是计算在某个日期创建了多少个对象,然后将其作为2行返回 - 一个包含所有日期,一个包含所有计数
Row1 | 2016-3-04 | 2016-5-23 | 2016-6-07 | 2016-9-12
Row2 | 1 | 3 | 4 | 2
如果有人能提供帮助,那将非常感激。
这是我目前所拥有的,我可以得到我需要的所有信息但是作为2列我需要它作为2行
SELECT datem,
SUM(num) AS total_num
FROM (
SELECT date_made AS datem,
obj_name,
COUNT(1) AS num
FROM db.tn
GROUP BY 1,2
) sub
GROUP BY 1
ORDER BY 1 DESC
答案 0 :(得分:0)
您可以尝试动态透视查询,如下所示
DECLARE @cols AS NVARCHAR(MAX),@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(date_made)
FROM tbl
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SELECT @query =
'SELECT * FROM '+
'(SELECT COUNT(1) count, date_made FROM tbl ) src '+
' pivot '+
'( max(count) for date_made in ('+@cols+'))p'
EXEC(@query)
答案 1 :(得分:0)
如果我读得正确,你最终会得到一个如下所示的聚合表:
date_made | count
----------|------
2016-3-04 | 1
2016-5-23 | 3
2016-6-07 | 4
2016-9-12 | 2
然后你想把桌子侧面转动看起来像你最初问题中的输出。因此,我认为这是这个问题的重复: