第一篇文章在这里,您好!
我在SQL中使用了一些XML来拆分字符串,这很好用。
在添加计算后尝试使用GROUP BY时,出现以下错误消息: “在选择列表中,列'm.n'无效,因为它既不包含在聚合函数中也不包含在GROUP BY子句中。”
我的代码段是:- TA.COST / COUNT(DISTINCT(WO.FIELD1))
LTRIM(RTRIM(m.n.value('。[1]','varchar(8000)')))
CAST(''+ REPLACE( (如果WO.FIELD1为NULL则为'UK'ELSE WO.FIELD1 END),';','')+''AS XML)AS x
交叉应用x.nodes('/ XMLRoot / RowData')m(n)
我尝试过'n'和'm.n',但是收到以下消息: “从nodes()方法返回的列'n'不能直接使用。它只能与四种XML数据类型方法之一一起使用:exist((),nodes(),query()和value() ),或在IS NULL和IS NOT NULL检查中进行。”
我也在这里进行了研究,并尝试在select和GROUP BY中使用CONVERT(VARCHAR(MAX).....),但无济于事。
我得到的错误是:“ GROUP BY子句中不允许使用XML方法”
如果需要,我可以发布代码,但是我想先听一遍。
在此先多谢与问候, Lex。
答案 0 :(得分:0)
好的,这可以按设计工作:-
SELECT WO.FIELD1, TA.FIELD2,
CONVERT(VARCHAR(MAX), LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)')))) AS COUNTRY
FROM
(
SELECT
WO.FIELD1,
CAST('<XMLRoot><RowData>' + REPLACE(WO.FIELD2,';','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM TABLE1 WO
) WO
LEFT JOIN TABLE2 TA ON WO.FIELD1 = TA.FIELD1
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)
但是,当我在选择中添加calc时,这就是GROUP BY中失败的地方:-
SELECT WO.FIELD1, TA.FIELD2 / COUNT(DISTINCT(WO.FIELD2)) AS "AVERAGE TIME",
CONVERT(VARCHAR(MAX), LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)')))) AS COUNTRY
FROM
(
SELECT WO.FIELD1,
CAST('<XMLRoot><RowData>' + REPLACE(WO.FIELD2,';','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM TABLE1 WO
) WO
LEFT JOIN TABLE2 TA ON WO.FIELD1 = TA.FIELD1
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)
GROUP BY
WO.FIELD1,
TA.FIELD2,
WO.FIELD2,
???????
非常感谢! :)