计算字段的条件显示

问题描述:

我正在处理名为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中需要改变什么?

我的建议有点不同。但是,如果我理解你是正确的。你可以这样做:

测试数据:

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