2015-09-17 29 views
0

我需要一些關於與另一個不同值相關的特定值的count語句的幫助。讓我們試着解釋一下。在SQL上用不同的條件計算一個不同的值

當前數據(輸出)

Policy Number|Member Number|Ben Type|Principal|Spouse|Child 
    1234   ABCD    M  
    1234   ABCD    S 
    1234   ABCD    C 
    1234   ABCD    C 

    1234   EFGH    M 
    1234   EFGH    C 
    1234   EFGH    C 

所需的輸出報告

Policy Number|Member Number|Ben Type|Principal|Spouse|Child 
    1234   ABCD    M  1   1  2 

    1234   EFGH    M  1   0  2 

中號主要成員 配偶 C子元素相關

的數據包含更多的列第一個例子ame等等。然而,我希望Ben Type指標的計數僅反映在顯示主成員信息的行上(Ben Type = M)。

以下代碼計算所有Ben類型指標而不使用策略編號作爲不同的值。可以有X 1個成員號碼的X2政策號碼。因此,不同的價值將是政策編號和會員編號。

UPDATE 
    [XRef1] 
SET 
    [Child] = 
(SELECT COUNT([Ben Type]) 
FROM 
    [Xref1] 
WHERE 
    [Ben Type] = 'C') 

這裏是另一個例子,我試過,但我知道它可能不會,因爲它不會返回所有列,只有政策數量和次數將是不正確的工作? 生成以下錯誤。

UPDATE 
    XRef1 
SET  
    [Child] = 
(SELECT DISTINCT[Policy Number],COUNT([Ben Type]) 
FROM  
    XRef1 
WHERE 
    [Ben Type] = 'C' 
GROUP BY 
    [policy Number]) 

我什麼都不知道真正關心EXISTS的語句(只有一個表達式可以在選擇列表時,子查詢不與EXISTS引入指定),但是我讀了它,並遵循一些查詢並來到下面。這是不正確的,基本上,子查詢是主查詢的副本。生成了同樣的錯誤。

UPDATE 
    XRef1 
SET   
    [Child] = 
(SELECT DISTINCT[Policy Number],COUNT([Ben Type]) 
FROM  
    XRef1 
WHERE 
    [Ben Type] = 'C' 
GROUP BY 
    [policy Number]) 
WHERE EXISTS 
(SELECT DISTINCT[Policy Number],COUNT([Ben Type]) 
FROM  
    XRef1 
WHERE 
    [Ben Type] = 'C' 
GROUP BY 
    [policy Number]) 

請告訴我,如果我在正確的軌道上,或試圖使這比它實際上更復雜。

+0

你確定你需要更新嗎? –

+0

簡單的PIVOT,政策編號和會員編號爲行,Ben鍵入您的列和計數作爲您的價值如何。如果你仍然想讓Ben Type出現,總是用'M'的值,最後只是CROSS JOIN。如果你願意的話,我可以擴展。 –

+0

是的,請你可以擴大這一點,我認爲我遵循,但不是100%相信我做的。 –

回答

1

試試這個:

SELECT PolicyNumber, MemberNumber, 'M' AS BenType, 
    [M], [S], [C] 
    FROM 
    (SELECT PolicyNumber, MemberNumber, BenType 
     FROM #Data) AS SourceTable 
    PIVOT 
    (
    COUNT(BenType) 
    FOR BenType IN ([M], [S], [C]) 
    ) AS PivotTable; 

Here是PIVOT運算符的一些信息。

+0

哇,如果我知道那會很容易,我會在幾個小時前發佈問題。感謝一百萬,這正是我想要的,並且計算是現貨。將只是做一個內部加入其餘的數據。感謝PIVOT上的Info,將會對它進行解讀。 –

+0

歡迎您的到來。 –

相關問題