SQL 根据条件查询分区

SQL query over partition with condition

我有一个像这样的 table,在 SQL Server 2019 中:

ITEM_ID Parent_Item Talle Existencia
909296 280647 4 1
909296 280647 4 1
909296 280647 4 1
909297 280647 5 1
909297 280647 5 1
909297 280647 5 1
909297 280647 5 1
909298 280647 6 1
909298 280647 6 1
909298 280647 6 1
909299 280647 7 1
909299 280647 7 1
909300 280647 8 1
909301 280647 9 1
909293 280647 11 1
909294 280647 12 1
909292 280647 10 1
1226447 280647 13 0

我需要一个名为 'Real Exist.' 的新列,其中包含 'Talle' 列中不同值的总和,当 'Existencia' = 1 时。在此示例中(Parent_item = 280647) 结果应为 9 ,因为 'Talle' 列中的值为 4,5,6,7,8,9,11, 12, 10 :

ITEM_ID Parent_Item Talle Existencia Real Exist.
909296 280647 4 1 9
909296 280647 4 1 9
909296 280647 4 1 9
909297 280647 5 1 9
909297 280647 5 1 9
909297 280647 5 1 9
909297 280647 5 1 9
909298 280647 6 1 9
909298 280647 6 1 9
909298 280647 6 1 9
909299 280647 7 1 9
909299 280647 7 1 9
909300 280647 8 1 9
909301 280647 9 1 9
909293 280647 11 1 9
909294 280647 12 1 9
909292 280647 10 1 9
1226447 280647 13 0 9

怎么做到的。提前致谢!

一种方法是使用派生查询来计算每个 Parent_Item

的唯一值的数量
SELECT yt.Item_Id
       , yt.Parent_Item
       , yt.Talle
       , yt.Existencia
       , cnt.NumOfTalle AS [Real Exist]
FROM   YourTable yt 
        INNER JOIN (
            SELECT Parent_Item, COUNT(DISTINCT Talle) AS NumOfTalle
            FROM   YourTable
            WHERE  Existencia = 1
            GROUP  BY Parent_Item
        ) 
        cnt ON cnt.Parent_Item = yt.Parent_Item

结果:

Item_Id | Parent_Item | Talle | Existencia | Real Exist
------: | ----------: | ----: | ---------: | ---------:
 909296 |      280647 |     4 |          1 |          9
 909296 |      280647 |     4 |          1 |          9
 909296 |      280647 |     4 |          1 |          9
 909297 |      280647 |     5 |          1 |          9
 909297 |      280647 |     5 |          1 |          9
 909297 |      280647 |     5 |          1 |          9
 909297 |      280647 |     5 |          1 |          9
 909298 |      280647 |     6 |          1 |          9
 909298 |      280647 |     6 |          1 |          9
 909298 |      280647 |     6 |          1 |          9
 909299 |      280647 |     7 |          1 |          9
 909299 |      280647 |     7 |          1 |          9
 909300 |      280647 |     8 |          1 |          9
 909301 |      280647 |     9 |          1 |          9
 909293 |      280647 |    11 |          1 |          9
 909294 |      280647 |    12 |          1 |          9
 909292 |      280647 |    10 |          1 |          9
1226447 |      280647 |    13 |          0 |          9

db<>fiddle here