【发布时间】:2021-02-03 12:34:04
【问题描述】:
我有这个问题:
SELECT
COUNT(DISTINCT DIAL) as CALL_SUMMARY,APP,DEST_URI
FROM
test.dbs
PIVOT (COUNT(DIAL) FOR APP IN(phone, mobile)) as log_status_new
WHERE
ID_DATE >= '2019-07-08 16:41:42'
AND ID_DATE < '2020-07-08 16:41:42'
GROUP BY APP,DEST_URI ;
但它返回此错误:
SQL 错误 [254] [S0001]:PIVOT 运算符的列列表中不允许有前缀列
样本数据:
+----------+----------+----------+
| DIAL | APP | DEST_URI |
+----------+----------+----------+
| 5656 | phone | 1 |
| 5657 | phone | 2 |
| 5456 | mobile | 6 |
| 5898 | mobile | 9 |
| 5656 | phone | 4 |
+----------+----------+----------+
收件人:
+----------+--------+--------+------------+
| DIAL | PHONE | MOBILE | DEST_URI |
+----------+--------+--------+------------+
| 5656 | 1 | | 1 |
| 5657 | 1 | | 2 |
| 5456 | | 1 | 6 |
| 5898 | | 1 | 9 |
| 5656 | 1 | | 4 |
+----------+--------+--------+------------+
【问题讨论】:
-
PIVOT在你的WHERE之后,而不是在它之前。查看documentation 中关于如何编写PIVOT的示例,因为您的查询也有其他方面的变形;虽然我个人建议在更严格的PIVOT运算符上使用条件聚合。 -
这段代码真的没有意义。您能否提供示例数据、期望的结果以及您想要完成的任务的说明。
-
Gordon 是对的,但看起来您想计算
APP的值为'phone'或'mobile'的行,然后得到DISTINCTCOUNT那个COUNT?那将永远是1。但是,当您已经在PIVOT中聚合它时,您将在SELECT中返回APP。到处都是。 -
希望我的编辑对您有所帮助。很抱歉造成误解,但我对此完全陌生。
标签: sql sql-server tsql pivot