[英]How to fix dynamic sql query syntax error that shown in below in synapse?
IF OBJECT_ID('temp..#temp') IS NOT NULL
BEGIN
DROP TABLE #temp
END
GO
CREATE TABLE #temp
(
[CxID] int,
[CompanyID] int,
[Category] int -- this category column is created by ROW_NUMBER function over partition by [CxID] order by [CxID] and [CompanyID]
)
INSERT INTO #temp ([CxID], [CompanyID], [Number]) VALUES ('1', '101', '1');
INSERT INTO #temp ([CxID], [CompanyID], [Number]) VALUES ('1', '102', '2');
INSERT INTO #temp ([CxID], [CompanyID], [Number]) VALUES ('1', '103', '3');
INSERT INTO #temp ([CxID], [CompanyID], [Number]) VALUES ('2', '201', '1');
INSERT INTO #temp ([CxID], [CompanyID], [Number]) VALUES ('3', '301', '1');
INSERT INTO #temp ([CxID], [CompanyID], [Number]) VALUES ('4', '401', '1');
INSERT INTO #temp ([CxID], [CompanyID], [Number]) VALUES ('5', '501', '1');
INSERT INTO #temp ([CxID], [CompanyID], [Number]) VALUES ('5', '502', '2');
INSERT INTO #temp ([CxID], [CompanyID], [Number]) VALUES ('5', '503', '3');
INSERT INTO #temp ([CxID], [CompanyID], [Number]) VALUES ('5', '504', '4');
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = (SELECT STRING_AGG(category,',') FROM (SELECT DISTINCT category FROM #temp WHERE category IS NOT NULL)t);
set @query = 'SELECT date, ' + @cols + ' from
(
select CxID
, CompanyID
, category
from #temp
) x
pivot
(
max(CompanyID)
for category in (' + @cols + ')
) p ';
execute(@query);
错误消息:第 11 行,第 34 列的解析错误:“1”附近的语法不正确。
问题:我们不知道客户在历史数据中可以拥有的CompanyID的最大数量,并且想要output如下:
CxID | 公司ID1 | 公司ID2 | 公司ID3 | ... | 公司 IDx |
---|---|---|---|---|---|
1 | 101 | 102 | 103 | ... | (无效的) |
2 | 201 | (无效的) | (无效的) | ... | (无效的) |
3 | 301 | (无效的) | (无效的) | ... | (无效的) |
4 | 401 | (无效的) | (无效的) | ... | (无效的) |
5 | 501 | 502 | 503 | ... | ... |
我认为您应该尽量避免将数字作为列,因为 pivot 对它们不好。
但是如果你想那么你必须改变 sql 所以它变成这样:
SELECT [1],[2],[3],[4] from
代替
SELECT 1,2,3,4 from
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.