Sql 尝试使用带有except的FOR XML路径
我试图在一行而不是多行中打印结果。 我有一个查询,如下所示:Sql 尝试使用带有except的FOR XML路径,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图在一行而不是多行中打印结果。 我有一个查询,如下所示: SELECT DISTINCT RTRIM(LTRIM(MACHNAME)) FROM MACHS WHERE MACHID <> 0 EXCEPT SELECT DISTINCT RTRIM(LTRIM(MACHNAME)) FROM GROUPS WHERE GROUPS.GROUPTYPE = 'M' 通过使用Except查询,我有
SELECT DISTINCT RTRIM(LTRIM(MACHNAME))
FROM MACHS
WHERE MACHID <> 0
EXCEPT
SELECT DISTINCT RTRIM(LTRIM(MACHNAME))
FROM GROUPS
WHERE GROUPS.GROUPTYPE = 'M'
通过使用Except查询,我有:
行号名称
1 WinMach2
2 WinMach6
我希望:
WinMach2,WinMach6
因此,为了在一行中打印结果,我尝试:
select stuff((SELECT DISTINCT ', ' + RTRIM(LTRIM(MACHNAME))
FROM MACHS
WHERE MACHID <> 0
EXCEPT
SELECT DISTINCT RTRIM(LTRIM(MACHNAME))
FROM GROUPS
WHERE GROUPS.GROUPTYPE = 'M'
for xml path ('')
), 1, 2, '') as machineName
FROM GROUPS
但是,错误在于:
FOR XML子句在视图、内联函数和派生函数中无效
表和子查询(当它们包含集合运算符时)。工作
使用派生表环绕包含集合运算符的SELECT
语法,并在其上应用XML
如果我这样做,它就起作用了:
select stuff((SELECT DISTINCT ', ' + RTRIM(LTRIM(MACHNAME)) FROM MACHS WHERE MACHID <> 0
for xml path ('')), 1, 2, '') as machineName
FROM MACHS
结果是:
WinMach1,WinMach2,WinMach3,WinMach4,
WinMach5,WinMach6,WinMach7,WinMach8,
WinMach9
我检查了这个:。但是,我无法理解修复方法
我试着:
但是,当我做第一部分时:
SELECT * FROM (SELECT DISTINCT RTRIM(LTRIM(MACHNAME))
FROM MACHS
WHERE MACHID <> 0
EXCEPT
SELECT DISTINCT RTRIM(LTRIM(MACHNAME))
FROM GROUPS
WHERE GROUPS.GROUPTYPE = 'M') AS K
错误为“未为“K”的第1列指定列名”
你能帮我吗
谢谢你的FROM条款。因此,您需要指定数据源-在本例中,它是K,但它应该是DS[K],表示数据源DS的别名,列为-K:
最后一个是这样的:
select stuff
(
(
SELECT DISTINCT ', ' + RTRIM(LTRIM(MACHNAME))
FROM
(
SELECT DISTINCT RTRIM(LTRIM(MACHNAME))
FROM MACHS
WHERE MACHID <> 0
EXCEPT
SELECT DISTINCT RTRIM(LTRIM(MACHNAME))
FROM GROUPS
WHERE GROUPS.GROUPTYPE = 'M'
) DS (MACHNAME)
for xml path ('')
)
,1
,2
, ''
) as machineName
我将使用“不存在”来代替:
select stuff( (select distinct ',' +rtrim(ltrim(m.MACHNAME))
from MACHS m
where MACHID <> 0 and
not exists (select 1
from GROUPS g
where g.MACHNAME = m.MACHNAME and
g.GROUPTYPE = 'M'
) for xml path ('')
), 1, 1, ''
) as MachName
select stuff( (select distinct ',' +rtrim(ltrim(m.MACHNAME))
from MACHS m
where MACHID <> 0 and
not exists (select 1
from GROUPS g
where g.MACHNAME = m.MACHNAME and
g.GROUPTYPE = 'M'
) for xml path ('')
), 1, 1, ''
) as MachName