【问题标题】:Prefixed columns are not allowed in the column list of a PIVOT operatorPIVOT 运算符的列列表中不允许有前缀列
【发布时间】: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' 的行,然后得到DISTINCT COUNT那个COUNT?那将永远是1。但是,当您已经在PIVOT 中聚合它时,您将在SELECT 中返回APP。到处都是。
  • 希望我的编辑对您有所帮助。很抱歉造成误解,但我对此完全陌生。

标签: sql sql-server tsql pivot


【解决方案1】:

您拥有的不是PIVOT。你只需要几个CASE 表达式:

SELECT DIAL,
       CASE APP WHEN 'phone' THEN 1 END AS PHONE,
       CASE APP WHEN 'mobile' THEN 1 END AS MOBILE,
       DEST_URI
FROM dbo.YourTable;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多