Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 通过PIVOT查找最高计数总数?_Sql_Sql Server_Pivot - Fatal编程技术网

Sql 通过PIVOT查找最高计数总数?

Sql 通过PIVOT查找最高计数总数?,sql,sql-server,pivot,Sql,Sql Server,Pivot,我有一个很大的数据集,其中我需要计算每个问题的“是”回答。我的查询如下所示: SELECT SUM(CASE (question1) WHEN 'Y' THEN 1 ELSE 0 END) as question1 , SUM(CASE (question2) WHEN 'Y' THEN 1 ELSE 0 END) as question2 , SUM(CASE (question3) WHEN 'Y' THEN 1 ELSE 0 END) as question3 , SUM(CASE (q

我有一个很大的数据集,其中我需要计算每个问题的“是”回答。我的查询如下所示:

SELECT 
SUM(CASE (question1) WHEN 'Y' THEN 1 ELSE 0 END) as question1
, SUM(CASE (question2) WHEN 'Y' THEN 1 ELSE 0 END) as question2
, SUM(CASE (question3) WHEN 'Y' THEN 1 ELSE 0 END) as question3
, SUM(CASE (question4) WHEN 'Y' THEN 1 ELSE 0 END) as question4
, SUM(CASE (question5) WHEN 'Y' THEN 1 ELSE 0 END) as question5
...... ( + dozens more ) ...
FROM myTable
name      | value
--------------------
question1 | 346
question2 | 187 
question3 | 240
question4 | 256
question5 | 261
这给了我一张这样的桌子:

question1 | question2 | question3 | question4 | question5 | ...
-------------------------------------------------------------------
346       | 187       | 240       | 256       | 261       | ...
好的。但我需要找到这一行中最高的3个值。我研究了PIVOT函数,试图将我的表转换为如下所示:

SELECT 
SUM(CASE (question1) WHEN 'Y' THEN 1 ELSE 0 END) as question1
, SUM(CASE (question2) WHEN 'Y' THEN 1 ELSE 0 END) as question2
, SUM(CASE (question3) WHEN 'Y' THEN 1 ELSE 0 END) as question3
, SUM(CASE (question4) WHEN 'Y' THEN 1 ELSE 0 END) as question4
, SUM(CASE (question5) WHEN 'Y' THEN 1 ELSE 0 END) as question5
...... ( + dozens more ) ...
FROM myTable
name      | value
--------------------
question1 | 346
question2 | 187 
question3 | 240
question4 | 256
question5 | 261
但我真的不明白为什么。。。在示例代码的第节中,以及我应该如何列出“包含将成为列标题的值”的列,如文档所述:

PIVOT
(
    <aggregation function>(<column being aggregated>)
FOR
[<column that contains the values that will become column headers>]
    IN ( [first pivoted column], [second pivoted column],
    ... [last pivoted column])
) AS <alias for the pivot table>
PIVOT
(
()
对于
[]
在([第一个数据透视列],[第二个数据透视列],
…[最后一个数据透视列])
)作为

因为我有一个只有一行的表,所以我没有一个列将成为列标题。有谁能帮助我理解如何使用我的1行数据集——或者更好的是,用不同的方法来实现这一点?我觉得我可能错过了一些更简单的东西。同样,最终目标是找到总数最高的3个问题

我想这可以帮助你:

CREATE TABLE #X(ID INT IDENTITY,question1 INT,question2 INT,question3 INT ,question4 INT ,question5 INT)


INSERT INTO #X
select 346,187,240,256,261  


select top 3 *
from (
select 
id,
question,
[value]
from #X
unpivot([value]  for question in(question1,question2,question3,question4,question5))P
)X 
order by [value] desc

您不需要
PIVOT
,如果您想要获得这些结果,您需要使用
UNPIVOT
。还有其他方法可以做到这一点,例如,您可以使用
交叉应用

;WITH CTE AS
(
SELECT  SUM(CASE (question1) WHEN 'Y' THEN 1 ELSE 0 END) as question1
        , SUM(CASE (question2) WHEN 'Y' THEN 1 ELSE 0 END) as question2
        , SUM(CASE (question3) WHEN 'Y' THEN 1 ELSE 0 END) as question3
        , SUM(CASE (question4) WHEN 'Y' THEN 1 ELSE 0 END) as question4
        , SUM(CASE (question5) WHEN 'Y' THEN 1 ELSE 0 END) as question5
        ...... ( + dozens more ) ...
FROM myTable
)
SELECT x.[name], x.Value
FROM CTE t
CROSS APPLY 
(
    VALUES
        ('question1', t.question1),
        ('question2', t.question2),
        ....
        ('questionN', t.questionN)
) x ([name], Value);

请放一些模拟表和行。伙计,我想用unpivot,在用order by value desc选择前三名之后,会解决你的问题。实际上,你需要
unpivot