[英]SQL Combining multiple rows into one row
我想做的是将与VhStock.No相关的所有作业代码合并为一行。 列WkRoDesc.Job_Code END AS WorkNeeded具有所有作业代码,但下面列出的四个作业代码之间用','分隔,然后将这四个作业代码以相同的方式组合到另一列中。
SELECT
--other things selected here
vhstock.No AS [Tag #],
WkInvReg.Ro_Number
CASE WHEN WkRoDesc.Job_Code = 'Outside AOR'
OR WkRoDesc.Job_Code = 'AOR Del'
OR WkRoDesc.Job_Code = 'AOR L & G'
OR WkRoDesc.Job_Code = '/Cust PU/D'
THEN NULL ELSE WkRoDesc.Job_Code END AS WorkNeeded,
CASE WHEN WkRoDesc.Job_Code = 'Outside AOR'
OR WkRoDesc.Job_Code = 'AOR Del'
OR WkRoDesc.Job_Code = 'AOR L & G'
OR WkRoDesc.Job_Code = '/Cust PU/D'
THEN WkRoDesc.Job_Code ELSE NULL END AS DPO
FROM vhstock, WkInvReg, WkRoDesc
WHERE vhstock.no = WkInvReg.Stock_No AND WkInvReg.Ro_Number = WkRoDesc.Ro_Number
我正在使用带有ODBC连接的SQL Server 08 R2从SQL Anywhere v.11数据库进行查询。 我正在使用Foresight Intelligence作为执行查询的界面。 我没有直接访问这两个数据库的权限,因为它们由软件供应商管理。
我怎样才能做到这一点? 尝试过此操作,但收到没有解释的错误
stuff((
select ',' + WkRoDesc.Job_Code + ', '
from WkRoDesc
where WkRoDesc.Ro_Number = WkInvReg.Ro_Number
and NOT (WkRoDesc.Job_Code = 'Outside AOR' OR WkRoDesc.Job_Code = 'AOR Del' OR WkRoDesc.Job_Code = 'AOR L & G' OR WkRoDesc.Job_Code = '/Cust PU/D')
FOR xml path('')
), 1, 1, '') AS WorkNeeded,
stuff((
select ',' + WkRoDesc.Job_Code + ', '
from WkRoDesc
where WkRoDesc.Ro_Number = WkInvReg.Ro_Number
and (WkRoDesc.Job_Code = 'Outside AOR' OR WkRoDesc.Job_Code = 'AOR Del' OR WkRoDesc.Job_Code = 'AOR L & G' OR WkRoDesc.Job_Code = '/Cust PU/D')
FOR xml path('')
), 1, 1, '') AS DPO
嗨,您尝试过groupby吗? 希望这可以帮助
MAX(DISTINCT CASE WHEN WkRoDesc.Job_Code = 'Outside AOR' THEN WkRoDesc.Job_Code END) + ',' + MAX(DISTINCT CASE WHEN WkRoDesc.Job_Code ='AOR Del' THEN WkRoDesc.Job_Code END)
+ ',' + MAX(DISTINCT CASE WHEN WkRoDesc.Job_Code ='AOR L & G' THEN WkRoDesc.Job_Code END) + ',' + MAX(DISTINCT CASE WHEN WkRoDesc.Job_Code ='/Cust PU/D' THEN WkRoDesc.Job_Code END)
AS WorkNeeded
结果是WorkNeeded =外部AOR,AOR Del,AOR L&G,/客户PU / D
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.