如果公司的名單總是有限的精確值的同一集合,你在評論暗示是真實的,你可以使用the PIVOT
feature(SQL Server 2005和以上):
SELECT CustomerID, [ATT], [VZ], [TM]
FROM (/* whatever gave you that result set above */) AS NormalizedData
PIVOT (MAX(Active) FOR Company IN ([ATT],[VZ],[TM])) AS PivotedData
的MAX()
是因爲您必須使用PIVOT
的集合函數;如果公司只有一個價值,那不應該是一個問題。
這不會給出與您要求的完全相同的結果集。如果指定的輸出列清單的要求,選擇條款改爲:
SELECT
CustomerID,
-- Use CASE so output is NULL if Active column is NULL
-- If you don't care, use: 'ATT' AS Company
CASE WHEN [ATT] IS NOT NULL THEN 'ATT' END AS Company,
[ATT] AS Active,
CASE WHEN [VZ] IS NOT NULL THEN 'VZ' END AS Company,
[VZ] AS Active,
CASE WHEN [TM] IS NOT NULL THEN 'TM' END AS Company,
[TM] AS Active
但是,我認爲他們會喜歡的冷凝輸出更好,因爲它可以更容易給所有的值進行比較。
如果沒有特定公司的行,它將在該列中返回一個NULL
。可悲的是,我不知道如何使動態sql的列列表動態化(從SQL Server 2005開始 - 沒有看過2008)。所以,如果另一家公司被添加(比如'SPR'),你將不得不返回並更改查詢。
你可能要做些什麼來幫助他們比較的另一件事是通過增加直接重複檢查:
WHERE CustomerID IN
(SELECT CustomerID FROM (/* original query */) Data
GROUP BY CustomerID, Active HAVING COUNT(*) > 1)
這將輸出列表限制爲僅與多個Active
標誌的項目。這可以添加到您的原始查詢或被旋轉的查詢中,但通過旋轉的查詢可以直接與輸出列進行比較,並避免額外的子查詢。當您可以讓計算機爲您完成時,手動掃描一系列值並無意義。
你如何向他們展示結果?它是在一個網站(即表格)還是直接訪問SQL Server? – Codesleuth 2010-03-18 13:10:54
每個客戶都是3個公司嗎?例如它是#001和#002的ATT,VZ,TM嗎?還是由客戶改變?例如ATT,VZ爲#001和ATT,SP爲#002? – PowerUser 2010-03-18 13:20:50
這似乎是一個演示文稿問題,可能是數據庫之外最好的處理方式。 – 2010-03-18 13:22:40