Kat*_*iel 5 sql sql-server conditional-statements
我有一个看起来像的查询
SELECT ju.name,
COUNT(DISTINCT p.value) AS nproblems
FROM #problems p
JOIN <thing> ju ON <whatever>
WHERE <condition 1>
AND <condition 2>
AND <condition 3>
GROUP BY ju.name
ORDER BY nproblems DESC
Run Code Online (Sandbox Code Playgroud)
这很好,并给我一个名称和值的结果集.但我真正关心的是没有WHERE子句的问题数,然后只有条件1,然后条件1 + 2,然后条件1 + 2 + 3.我想写
SELECT ju.name,
COUNT(DISTINCT p.value WHERE <condition 1>) foo,
COUNT(DISTINCT p.value WHERE <condition 2>) bar,
...
Run Code Online (Sandbox Code Playgroud)
但遗憾的是我做不到.有这么好的方法吗?
您可以使用CASE表达式来执行此操作:
SELECT ju.name,
SUM(CASE WHEN <condition 1> THEN 1 ELSE 0 END) AS foo,
SUM(CASE WHEN <condition 1> THEN 1 ELSE 0 END) AS bar,
...
FROM #problems p
JOIN <thing> ju ON <whatever>
GROUP BY ju.name
ORDER BY nproblems DESC;
Run Code Online (Sandbox Code Playgroud)
但是:如果您使用的是支持表运算符的 RDBMS PIVOT(例如 MS SQL Server 或 Oracle),则可以直接使用它来执行此操作。
由于您使用的是 SQL Server,因此可以使用PIVOT表运算符来执行此操作:
SELECT *
FROM
(
) AS t
PIVOT
(
COUNT(value)
FOR name IN(...)
) AS p;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |