在T-SQL中,我试图将某些行的值转换为列。
初始表:

Project | Machine | Value
-------------------------
A   X   100
A   Y   99
A   Z   98
A   W   97
B   X   97
B   Y   96
B   W   95
C   X   95
C   Z   94

我想要的结果是:

Project     MX  MY  MZ  MW
-----------------------------
A           100 99  98  97
B            97 96   0  95
C            95  0  94   0

我创建了测试代码:

CREATE TABLE Company (project char(1), machine char(1), cost int)
GO

INSERT INTO Company 
VALUES ('A', 'X', 100), ('A', 'Y', 99), ('A', 'Z', 98),
       ('A', 'W', 97), ('B', 'X', 97), ('B', 'Y', 96),
       ('B', 'W', 95), ('C', 'X', 95), ('C', 'Z', 94);

我的透视查询:

SELECT
    project, 'X', 'Y', 'Z', 'W'
FROM
    (SELECT 
         project, machine, cost 
     FROM 
         Company) p
PIVOT
    (MAX(cost)
        FOR machine IN ('X', 'Y', 'Z', 'W') AS  pvt

我收到此错误:

“X”附近的语法不正确

我的数据透视查询错了吗?

提前致谢

#1楼 票数:3 已采纳

如果你有一台有限的机器,那么我会做条件聚合而不是PIVOT

SELECT Project,
       MAX(CASE WHEN machine = 'X' THEN cost END) AS MX,
       MAX(CASE WHEN machine = 'Y' THEN cost END) AS MY,
       MAX(CASE WHEN machine = 'Z' THEN cost END) AS MZ,
       MAX(CASE WHEN machine = 'W' THEN cost END) AS MW
FROM Company c
GROUP BY Project;

如果你想使用PIVOT ,那么我会修复语法错误,但缺少右括号:

SELECT * 
FROM (SELECT project, machine, cost 
      FROM Company 
     ) AS p PIVOT
     (MAX(cost)
      FOR machine IN ([X], [Y], [Z], [W]) 
     ) AS pvt;

注意 :

  • 不要使用单引号作为列名使用方括号代替。

  ask by spiderman translate from so

未解决问题?本站智能推荐:

2回复

SQL Server:将行转置为列

我正在尝试转置数据。 列数不固定(即选定的 ShiftNames 不固定)。 这是我的输入数据。 输出将是这样的
2回复

如何在不创建临时表的情况下将 SQL SERVER 中的行转换为列

请帮我转置下表,而不创建临时表。 尝试 PIVOT 但失败了。 任何建议也将有所帮助。 谢谢! 现有表: 时间 价值 2020/4/8 5:18 1 2020/4/8 5:22
2回复

将 Rows 转置为 Column 。 2 SQL Server 中的 Varchar 列

将行转置为列。 我在 SQL Server 中有 2 个Varchar列。 我不能使用数据透视,因为我不能在varchar列上运行聚合。 我有 2 列Name, Occupation 。 只需要转置那些。
2回复

SQL将列转置为行

我一直在试图换位。 入此; 我已经看过使用枢轴/非枢轴,并且到目前为止 但是,在弄清楚如何将所有透视结果合并到单个逗号分隔的列中(如我期望的示例)时,我遇到了很多麻烦。 任何帮助或指导表示赞赏。
1回复

将SQL列转置为行

我有下表,并希望在SQL中转置它,我已经尝试使用SQL PIVOT但我无处可去。 任何帮助深表感谢。 我想将此表转置到下面 以下是我的想法,但希望从这里改进。 谢谢
3回复

SQL-将行转置为列

我正在努力实现以下目标: 鉴于: 预期: 本质上,我希望做的是将颜色列作为其值作为行值的各个列。 不过有一个陷阱,您只能使用以下SQL函数: 骨料 Avg(),Count(),Max(),Min(),Sum(),Round() 算术运算符 (加
2回复

MS SQL Server。 将数据列转置为数据行

我有一个详细信息表,可以用以下内容进行描述: 我们插入一些种子数据: 全选产生以下内容: 我想将列数据转置为行,以产生以下输出: 提前致谢。
2回复

SQL Server如何在没有PIVOT或UNPIVOT或聚合的情况下将行转置为列[重复]

这个问题已经在这里有了答案: SQL转置全表 1答案 SQL:Real Transpose 1答案 编辑1:两种解决方案和DUPE链接都起作用,但是它们都没有保留我想要的列顺序。 所有解决方案均按字母顺序对结果列名称进行排序。 如果有人对此有解决方案,