交叉应用于SQL Server上的列。 )

时间:2018-12-10 21:55:56

标签: sql sql-server azure unpivot cross-apply

我试图取消多列,但是找不到解决语法错误的方法。

在')'附近显示不正确的语法。

代码如下:

SELECT dates, times, locations, events
FROM mytable
CROSS APPLY 
    (VALUES ('instance1', instance1),
            ('instance2', instance2),
            ('instance3', instance3),
            ('instance4', instance4)) as Items(locations, events)

是否可能是因为我的SQL Server版本不正确支持值,并且我需要将值存储在其他表中以进行交叉引用?

enter image description here

2 个答案:

答案 0 :(得分:1)

很酷,我从来没有那样做过。我总是使用UNPIVOT命令。但是它似乎确实运行良好。不知道mytable的结构,我不知道问题所在,但是我猜它没有名称为instance1到instance4的列?

这是一个独立的工作示例:

select dates
      ,times
      ,locations
      ,events
from
(
    values
        ('20181225', 'noon', 'a', 'b', 'c', 'd')
       ,('20181226', 'midnight', 'e', 'f', 'g', 'h')
) mytable (dates, times, instance1, instance2, instance3, instance4)
cross apply
(
    values
        ('instance1', instance1)
       ,('instance2', instance2)
       ,('instance3', instance3)
       ,('instance4', instance4)
) as Items (locations, events);

答案 1 :(得分:1)

由于这样使用VALUES在Azure SQL数据仓库中存在问题,因此请切换到UNPIVOT

SELECT dates, times, locations, events
FROM mytable t
UNPIVOT (events FOR [locations] IN ([instance1],[instance2],[instance3],[instance4])) AS unpvt;

测试here