Pop*_*ops 2 sql t-sql pivot odata
我之前从未使用过TSQL,但我决定无论如何都想在SO 数据转储中使用它.所以这可能是一个新秀问题.我确实试图寻找答案,但我不知道我正在尝试做什么的技术术语,如果你没有合适的关键词,那么搜索就会很好.
我的目标是找出有多少问题得分为0,有多少得分为1,有多少得分为2,&c.我可以写一个查询来找出那些个人计数,没问题.不过,我希望能够运行包含循环的查询.这是我到目前为止所使用的:
DECLARE @counter int
SET @counter = 0
WHILE @counter < 3
BEGIN
SELECT
COUNT(*)
FROM
Posts
WHERE
PostTypeId = 1
AND
Score = @counter
SET @counter = @counter + 1
END
Run Code Online (Sandbox Code Playgroud)
(编辑:最终目标是从[0,3]扩展到[-100,1000]或任何必要的内容来解决所有现有问题.显然,我的问题是我在循环的每个循环中抓取计数然后没有做任何事情.目前,我得到的结果只是@counter最初设置的数量; 迭代次数无关紧要.是否可以将结果存储在某处,然后显示为:
+-------+--------------------------------+ | Score | NumberOfQuestionsWithThatScore | +-------+--------------------------------+ | -10 | 111 | +-------+--------------------------------+ | -9 | 0 | +-------+--------------------------------+ | -8 | 248 | +-------+--------------------------------+ | ... | ... | +-------+--------------------------------+
(编辑:任何合理清晰的显示都很好,上表只是一个样本; 编辑2:修改表的设计,以清除持续的混乱)
如果是这样,这叫什么,它是如何完成的?
实际上你可以一次性做到这一点......
SELECT COUNT(*) AS Total, MAX(Score) AS Score
FROM Posts
WHERE PostTypeId = 1 And Score <= 3
Group By Score
Run Code Online (Sandbox Code Playgroud)
这应该给你一个很好的表,如:
Score Total
0 2490
1 2904
2 2110
Run Code Online (Sandbox Code Playgroud)
疼痛就是袖手旁观,而不是现在在DB前面来验证语法.查看"分组依据"以获得更好的主意.
AS @OMG小马指出这不像你原来的那样.如果要包含单个列,则需要使用SELECT和SUM来执行此操作.
您列出的输出是标准数据透视查询,将行转换为列数据:
SELECT SUM(CASE WHEN p.score = 0 THEN 1 ELSE 0 END) AS ScoreOfZero,
SUM(CASE WHEN p.score = 1 THEN 1 ELSE 0 END) AS ScoreOfOne,
SUM(CASE WHEN p.score = 2 THEN 1 ELSE 0 END) AS ScoreOfTwo
FROM POSTS p
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |