sql - PIVOT 的 FOR 部分中的表达式

标签 sql sql-server t-sql pivot erp

我正在尝试使用 PIVOT 来获取每种产品的购买总重量,并按列中的年/月进行分割。像这样的事情:

+------------+--------+--------+--------+
| ProductKey | Jan-14 | Feb-14 | Mar-14 | Etc...
+------------+--------+--------+--------+
|         10 |   5000 |   7000 |   3000 |
|         20 |  10000 |   8000 |   6000 |
|         30 |    250 |    500 |    400 |
+------------+--------+--------+--------+

这是我第一次尝试使用 PIVOT,所以不确定这是否正确:

PIVOT
(
SUM([PO_PurchaseOrderLines].[EstimatedWeight])
FOR
LEFT(DATENAME(MONTH,[PO_Date]),3) & "-" & RIGHT(YEAR([PO_Date]),2)
IN (Jan-14, Feb-14, Mar-14, Apr-14, May-14, Jun-14, Jul-14, Aug-14, Sep-14, Oct-14, Nov-14, Dec-14, Jan-15, Feb-15, Mar-15, Apr-15, May-15, Jun-15, Jul-15, Aug-15, Sep-15, Oct-15, Nov-15, Dec-15, Jan-16, Feb-16, Mar-16, Apr-16, May-16, Jun-16, Jul-16, Aug-16, Sep-16, Oct-16, Nov-16, Dec-16, Jan-17, Feb-17, Mar-17)
) AS POPivot

运行此结果:

[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'LEFT'.

FOR 部分中使用这样的表达式是不可能的吗?还有什么不正确的吗?

最佳答案

Select *
From (
        Select ProductKey
              ,Col = format(PO_Date,'MMM-yy')
              ,EstimatedWeight
         From YourTable A
     ) A
 Pivot (sum(EstimatedWeight) For [Col] in ([Jan-14],[Feb-14],[Mar-14]) ) p

关于sql - PIVOT 的 FOR 部分中的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43128096/

相关文章:

python - Postgres : Retrieve records Sequentially at 5 seconds interval

php - 通过内部连接和最大 ID 获取最高 ID

sql - 如何将 SQL Server 作业名称传递给该作业内的存储过程?

sql-server - T-SQL 整数数组排序

python - SQLAlchemy:有没有办法跟踪通过 SQLAlchemy 完成的查询的行号和调用类?

mysql - 如何根据先前和最后更改的值构建新的日期列?

sql-server - SSIS - 再次出现内存不足错误

c# - 如何更新 SQL 表逻辑

sql-server - 使用 TRUNCATE TABLE 如何影响索引

sql-server - T-SQL 将另一个字段中存在的连字符分隔值的平均值放入一个字段中