SQL Объединение нескольких строк в одну строку

Я хочу объединить все коды заданий, связанные с 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

Я использую SQL Server 08 R2 с подключением ODBC для запроса из базы данных 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

person Troy    schedule 16.09.2013    source источник
comment
Проверьте это сообщение. Вам нужно использовать функцию Stuff с Path Xml for   -  person Nilesh    schedule 16.09.2013
comment
Просто попытался сделать это с помощью приведенного выше кода, и он выдает ошибку, но в графическом интерфейсе он не говорит, в чем была ошибка.   -  person Troy    schedule 16.09.2013
comment
У него нет точной ошибки, просто говорится, что не удалось проверить оператор SQL базы данных.   -  person Troy    schedule 16.09.2013


Ответы (1)


Привет, ты пробовал 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 = Outside AOR,AOR Del,AOR L & G,/Cust PU/D

person Angelo    schedule 17.09.2013
comment
Не работает Проверка SQL не удалась. Я предполагаю, что SQL везде выдает ошибку, поскольку я впервые использую ее. И это имеет смысл для меня - person Troy; 17.09.2013