2014-12-02 92 views
1

我正在處理名爲FCT_HISTO_PORTES的表,其中包含ID_MVT_EXPL和ID_PTE字段,它們是整數。在該表中,ID_MVT_EXPL與一個,兩個或三個ID_PTE相關聯。計算字段的條件顯示

下面是一個例子:

select top 1000 
ID_MVT_EXPL, 
ID_PTE 
from FCT_HISTO_PORTES 

ID_MVT_EXPL ID_PTE 
3945546  6 
3945547  25 
3945548  56 
3945548  57 
3945549  25 
3945550  52 
3945551  57 
3945551  58 
3945553  56 
3945557  51 
3945558  57 
3945558  58 

你可以看到 「3945546」 有一個ID_PTE和 「3945548」 有兩種不同的ID_PTE。

遊戲的目的是,我可以爲每個ID_MVT_EXPL顯示一行,並命名字段爲ID_PTE_1,ID_PTE_2,ID_PTE_3。

我嘗試過使用此SELECT,但結果不正確,因爲所有ID_PTE都適合ID_PTE_1,並將其他兩個留給NULL。

select top 1000 
ID_MVT_EXPL, 
MIN(id_pte) as ID_PTE_1, 
case 
    when COUNT(id_pte) = 2 
    then MAX(id_pte) 
    when COUNT(id_pte) = 3 
    then SUM(id_pte)-(MIN(ID_PTE)+MAX(ID_PTE)) 
end as ID_PTE_2, 
case 
    when COUNT(id_pte) = 3 
    then MAX(id_pte) 
end as ID_PTE_3 
from FCT_HISTO_PORTES 
group by ID_MVT_EXPL, ID_PTE 

ID_MVT_EXPL ID_PTE_1 ID_PTE_2 ID_PTE_3 
3945546  6  NULL  NULL 
3945547  25  NULL  NULL 
3945548  56  NULL  NULL 
3945548  57  NULL  NULL 
3945549  25  NULL  NULL 
3945550  52  NULL  NULL 
3945551  57  NULL  NULL 
3945551  58  NULL  NULL 
3945553  56  NULL  NULL 
3945557  51  NULL  NULL 
3945558  57  NULL  NULL 
3945558  58  NULL  NULL 

那麼在我的SELECT中需要改變什麼?

回答

0

我的建議有點不同。但是,如果我理解你是正確的。你可以這樣做:

測試數據:

DECLARE @tbl TABLE(ID_MVT_EXPL INT, ID_PTE INT) 
INSERT INTO @tbl 
VALUES 
(3945546,6),(3945547,25),(3945548,56),(3945548,57), 
(3945549,25),(3945550,52),(3945551,57),(3945551,58), 
(3945553,56),(3945557,51),(3945558,57),(3945558,58) 

查詢:

SELECT 
    pvt.ID_MVT_EXPL, 
    pvt.[1] AS ID_PTE_1, 
    pvt.[2] AS ID_PTE_2, 
    pvt.[3] AS ID_PTE_3 
FROM 
(
    SELECT 
     ROW_NUMBER() OVER(PARTITION BY tbl.ID_MVT_EXPL ORDER BY ID_PTE) AS RowNbr, 
     tbl.ID_MVT_EXPL, 
     tbl.ID_PTE 
    FROM 
     @tbl AS tbl 
) AS SourceTable 
PIVOT 
(
    MAX(ID_PTE) 
    FOR RowNbr IN([1],[2],[3]) 
) AS pvt 

輸出:

3945546 6 NULL NULL 
3945547 25 NULL NULL 
3945548 56 57  NULL 
3945549 25 NULL NULL 
3945550 52 NULL NULL 
3945551 57 58  NULL 
3945553 56 NULL NULL 
3945557 51 NULL NULL 
3945558 57 58  NULL 

參考:

+0

呀你的建議,這樣的作品非常感謝你! :) – 2014-12-02 15:19:13

+0

@ Jean-ChristopheCASTELLANA:沒問題。樂意效勞 – Arion 2014-12-02 15:33:22