Sql server 计算字段的条件显示
我正在处理一个名为FCT_HISTO_PORTES的表,该表包含ID_MVT_EXPL和ID_PTE字段,它们是整数。在该表中,ID_MVT_EXP与一个、两个或三个ID_PTE相关联 下面是一个例子:Sql server 计算字段的条件显示,sql-server,sql-server-2008,conditional,Sql Server,Sql Server 2008,Conditional,我正在处理一个名为FCT_HISTO_PORTES的表,该表包含ID_MVT_EXPL和ID_PTE字段,它们是整数。在该表中,ID_MVT_EXP与一个、两个或三个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
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
我尝试使用此选择,但结果不正确,因为所有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
那么,我的选择需要改变什么呢?我的建议有点不同。但如果我理解你的话,你是对的。您可以这样做: 测试数据: 查询: 输出: 参考:
是的,你的建议很有效,非常感谢@让·克里斯托弗·卡斯特拉纳:没问题。很乐意帮忙
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