2016-04-26 2 views
1

У меня есть вложенный запрос с внутренним соединением, который возвращает несколько записей для данного «программного обеспечения», но мне нужно сжать результаты в одной строке ... (Выход прилагается) для одного программного обеспечения вы видите несколько записей с полями с «разрешенными» и «не разрешенными», и мне нужно сжать это до одной строки, показывая разрешенные - разрешенные - не разрешенные, соответственно ... например. , но иногда один и тот же столбец будет иметь две или более «решенных» записей. Я хотел бы создать новый столбец, например SPPA2 или WCS2, и т. Д., Если это произойдет, и объединить дату для каждой записи в том же столбце, что и «разрешено», или «не разрешено» Я довольно новичок , поэтому пытаюсь разобраться в логике.Подведение итогов в SQL-вложенном запросе с объединением таблицы

SELECT * FROM 
(SELECT act.Vendor + ' ' + act.[Application Name] + ' ' + act.Version as "Software name" 
       ,act.srmNumber as SRM# 
       ,ssd.DateAssign 

       ,IIF(ssd.DateResolv IS NOT NULL AND ssd.EntryText LIKE '%Step 1%' AND ssd.TargetUnitID = 48, 'Resolved', 'Not Resolved') as SPPA 
       ,IIF(ssd.DateResolv IS NOT NULL AND ssd.EntryText LIKE '%Step 2%' AND ssd.TargetUnitID = 39, 'Resolved', 'Not Resolved') as WCS 
       ,IIF(ssd.DateResolv IS NOT NULL AND ssd.EntryText LIKE '%Step 3%' AND ssd.TargetUnitID = 738, 'Resolved', 'Not Resolved') as SAM 
FROM [SAMI_Main].dbo.vw_SAM_Software_Deployment AS ssd INNER JOIN [SAMI_Main].dbo.ACT_Inventory AS act ON act.srmNumber = RIGHT(ssd.callID,7)) AS T1 
WHERE t1.SPPA = 'Resolved' OR t1.WCS = 'Resolved' OR t1.SAM = 'Resolved' 
; 

OUTPUT HERE

ответ

0

ли это ожидаемый результат?

|Software Name|SRM#|SPPA|WCS|SAM| 

|SAP...|1456484|Resolved 2015-09-22|Not Resolved|Not Resolved| 

|Dessci...|1514703|Resolved 2016-01-20|Not Resolved|Not Resolved| 

|Adobe Air...|1525807|Resolved 2016-02-11|Not Resolved|Not Resolved| 

Если это так, этот запрос может работать. У меня нет доступа к SQL Server, так что я не уверен о синтаксисе:

SELECT DISTINCT software_name AS [Software Name], 
SRM#, 
IIF(SPPA = 'Resolved', 'Resolved' + ' ' + MAX(DateAssign OVER (PARTITION BY software_name, SPPA), 'Not Resolved') AS SPPA, 
IIF(WCS = 'Resolved', 'Resolved' + ' ' + MAX(DateAssign OVER (PARTITION BY software_name, WCS), 'Not Resolved') AS WCS, 
IIF(SAM = 'Resolved', 'Resolved' + ' ' + MAX(DateAssign OVER (PARTITION BY software_name, SAM), 'Not Resolved') AS SAM 
FROM 
(SELECT act.Vendor + ' ' + act.[Application Name] + ' ' + act.Version as software_name 
,act.srmNumber as SRM# 
,ssd.DateAssign 
,IIF(ssd.DateResolv IS NOT NULL AND ssd.EntryText LIKE '%Step 1%' AND ssd.TargetUnitID = 48, 'Resolved', 'Not Resolved') as SPPA 
,IIF(ssd.DateResolv IS NOT NULL AND ssd.EntryText LIKE '%Step 2%' AND ssd.TargetUnitID = 39, 'Resolved', 'Not Resolved') as WCS 
,IIF(ssd.DateResolv IS NOT NULL AND ssd.EntryText LIKE '%Step 3%' AND ssd.TargetUnitID = 738, 'Resolved', 'Not Resolved') as SAM 
FROM [SAMI_Main].dbo.vw_SAM_Software_Deployment AS ssd 
INNER JOIN [SAMI_Main].dbo.ACT_Inventory AS act ON act.srmNumber =  RIGHT(ssd.callID,7)) AS T1 
WHERE t1.SPPA = 'Resolved' OR t1.WCS = 'Resolved' OR t1.SAM = 'Resolved'; 

Я использовал ключевое слово MAX в качестве аналитической функции здесь. У меня есть written about the MAX keyword раньше, но с точки зрения Oracle. Я понимаю, что он работает аналогично в SQL Server.

0

спасибо за réponse, я вымыл синтаксис кода с помощью MAX() для SqlServ .. Он дал выход в прикрепленных ... OUTPUT HERE

, так что я просто нужна запись сжатой одному запись для каждого программного обеспечения, отображающего каждый разрешенный столбец с датой MAX(), как вы указали, если это существует в каждом столбце ... так что в примере это будет «Adobe Air» как одна запись, при этом весь столбец «разрешен». другое программное обеспечение 2 предназначено.

SELECT DISTINCT software_name AS [Software Name], 

SRM #, ИМФ (SPPA = 'Решенный', 'Решенный' + '(' + MAX (DateAssign) НАД (PARTITION BY software_name, SPPA) + ')', 'не решен') А.С. SPPA, IIF (WCS = 'Разрешено', 'Разрешено' + '(' + MAX (DateAssign) OVER (PARTITION by software_name, WCS) + ')', 'Не разрешено') AS WCS, IIF (SAM = ' «Разрешено», «Разрешено» + «(« + MAX (DateAssign) OVER (PARTITION by software_name, SAM) + ')', «Не разрешено») AS SAM FROM (SELECT act.Vendor + '' + act. [ Название приложения] + '' + act.Version как имя_программы , act.srmNumber как SRM # , ssd.DateAssign , IIF (ssd. DateResolv IS NOT NULL И ssd.EntryText LIKE '% Step 1%' AND ssd.TargetUnitID = 48, «Разрешено», «Не разрешено») как SPPA , IIF (ssd.DateResolv IS NOT NULL AND ssd.EntryText LIKE '% Шаг 2% 'И ssd.TargetUnitID = 39, «Разрешено», «Не разрешено»), как WCS , IIF (ssd.DateResolv НЕ НУЛЛ И ssd.EntryText LIKE'% Step 3% 'AND ssd.TargetUnitID = 738, «Разрешено», «Не разрешено») как SAM
FROM [SAMI_Main] .dbo.vw_SAM_Software_Deployment AS ssd INNER JOIN [SAMI_Main] .dbo.ACT_Inventory AS act ON act.srmNumber = RIGHT (ssd.callID, 7)) AS t1 WHERE t1.SPPA = 'Разрешено' ИЛИ ​​t1.WCS = 'Разрешено' ИЛИ ​​t1.SAM = 'Разрешено' ORDER BY SRM # DESC;

Смежные вопросы