2016-12-16 35 views
0

all! 假设表格如下结构仅限具有给定条件的行

DECLARE @TempTable TABLE 
(
    idProduct INT, 
    Layers INT, 
    LayersOnPallet INT, 
    id INT IDENTITY(1, 1) NOT NULL, 
    Summarized BIT NOT NULL DEFAULT(0) 
) 

并产生下列插入语句的测试数据

INSERT INTO @TempTable(idProduct, Layers, LayersOnPallet) 
SELECT 1, 2, 4 
UNION ALL 
SELECT 1, 2, 4 
UNION ALL 
SELECT 1, 1, 4 
UNION ALL 
SELECT 2, 2, 4 

我想总结只有那些行(仅由层)具有相同idProduct并且将层的总和等于LayersOnPallet。

一张图片胜过千言万语:

enter image description here

从上面的图片中,可以看到,只有先行进行了总结,因为两者具有相同的idProduct和总和(层)将等于LayersOnPallet。 我该如何做到这一点?只有在选择时才有办法做到这一点(不适用于while)?

谢谢!

+0

这部分是不明确的“行与同idProduct和这将有层等于LayersOnPallet的总和。” – DarkKnight

+0

谢谢你的回应!我只想总结前两行,因为两者都有相同的idProduct,总和(4)将等于LayersOnPallet(4)。 –

+0

层数之和(2 + 2)!= LayersOnPallet(4 + 4)之和。他们是如何总结的? – DarkKnight

回答

1

也许这会做到这一点。注意我的意见:

-- your sample data 
DECLARE @TempTable TABLE 
(
    idProduct INT, 
    Layers INT, 
    LayersOnPallet INT, 
    id INT IDENTITY(1, 1) NOT NULL, 
    Summarized BIT NOT NULL DEFAULT(0) 
) 
INSERT INTO @TempTable(idProduct, Layers, LayersOnPallet) 
SELECT 1, 2, 4 UNION ALL 
SELECT 1, 2, 4 UNION ALL 
SELECT 1, 1, 4 UNION ALL 
SELECT 2, 2, 4; 

-- an intermediate temp table used for processing 
IF OBJECT_ID('tempdb..#processing') IS NOT NULL DROP TABLE #processing; 

-- let's populate the #processing table with duplicates 
SELECT 
    idProduct, 
    Layers, 
    LayersOnPallet, 
    rCount = COUNT(*) 
INTO #processing 
FROM @tempTable 
GROUP BY 
    idProduct, 
    Layers, 
    LayersOnPallet 
HAVING COUNT(*) > 1; 

-- Remove the duplicates 
DELETE t 
FROM @TempTable t 
JOIN #processing p 
    ON p.idProduct  = t.idProduct 
    AND p.Layers   = t.Layers 
    AND p.LayersOnPallet = t.LayersOnPallet 

-- Add the new, updated record 
INSERT @TempTable 
SELECT 
    idProduct, 
    Layers * rCount, 
    LayersOnPallet, 1 
FROM #processing; 

DROP TABLE #processing; -- cleanup 

-- Final output 
SELECT idProduct, Layers, LayersOnPallet, Summarized 
FROM @TempTable; 

结果:

idProduct Layers  LayersOnPallet Summarized 
----------- ----------- -------------- ---------- 
1   4   4    1 
1   1   4    0 
2   2   4    0 
+0

谢谢您的回答! –

相关问题