2016-04-26 14 views
1

与えられた "ソフトウェア"の複数のレコードを返す内部結合のネストされたクエリがありますが、結果を1行に圧縮する必要があります... 1つのソフトウェアの場合は 、 '解決済み'と '解決済み'のフィールドを持つ複数のレコードが表示されますが、これを1行に圧縮し、解決済み解決済みを解決してください。 ただし、同じ列に2つ以上の「解決済み」レコードがあることがあります。 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

REPONSEためのおかげで、私はSqlServ用)MAXを(使用してコードに構文をクリーンアップ.. 添付としてそれは出力を与えた... OUTPUT HERE

ので、私はちょうど1に圧縮されたレコードを必要とします各列に存在する場合は、指定したMAX()の日付を持つResolved列を表示する各ソフトウェアについて、この例では、すべての列が「解決済み」の1つのレコードとして「Adobe Air」となります。他の2つのソフトウェアは意図されたものです。

SELECT DISTINCT software_name AS [Software Name], 

SRM番号、 IIF(SOFTWARE_NAME、SPPA)BY SPPA = '解決'、 '解決' + '(' + MAX(DateAssign)OVER(PARTITION + ')'、 '解決しない')AS AS WCS、 IIF(SAM = '解決済み'、 '解決済み' + '(' + MAX(DateAssign)OVER(PARTITION BYソフトウェア名、WCS)+ ')' )、 '解決済み'、 '解決済み' + '(' + MAX(DateAssign)OVER(PARTITION BYソフトウェア名、SAM)+ ')'、 '解決されていません')AS SAM FROM (SELECT act.Vendor + '' + act。[アプリケーション名] + '' + act.Version as software_name 、act.srmNumber as SRM# 、ssd.DateAssign 、IIF(ssd。 SPPA 、IIF(ssd.DateResolv IS NOT NULLおよびssd.EntryText LIKE '%)のようにDateResolvがNULLでなく、ssd.EntryText LIKE'%1% 'およびssd.TargetUnitID = 48、' Resolved '、' Resolved ' WCS 、IIF(ssd.DateResolvはNULLではなく、ssd.EntryText LIKE '%Step 3%'およびssd.TargetUnitID = 738)として、「ステップ2% 'およびssd.TargetUnitID = 39、「解決済み」、「解決されていません」) '解決済'、 '解決されていません')として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 = '解決済み' OR t1.WCS = '解決済み' OR t1.SAM = '解決済' ORDER BY SRM#DESC;

関連する問題