4

これまでのところ、次のものがあります。

DECLARE @Table Table (ID int, Value1 varchar(50), Value2 varchar(50), Value3 varchar(50))
INSERT INTO @Table (ID, Value1, Value2, Value3)
SELECT 1, 'One', 'Uno', 'FIrst'
UNION ALL
SELECT 2, 'Two', 'Dos', 'Second'
UNION ALL
SELECT 3, 'One', 'Uno', 'Third'
UNION ALL
SELECT 4, 'Three', 'Tres', 'Fourth'

SELECT *, CASE
            WHEN COUNT(*) OVER (PARTITION BY  Value1, Value2) > 1 THEN 1
            ELSE 0
        END AS Duplicate  FROM @Table

これは私に重複を与えます。重複レコードの値を「First - Third」(両方の列) として連結したもう 1 つの列を派生させたい

期待される出力

ID  Value1  Value2  Value3  Duplicate   Value3
1   One     Uno     FIrst   1           First - Third
3   One     Uno     Third   1           First - Third
4   Three   Tres    Fourth  0           NULL
2   Two     Dos     Second  0           NULL 
4

3 に答える 3

1

これを試してください:

DECLARE @Table Table (ID int, Value1 varchar(50), Value2 varchar(50), Value3 varchar(50))
INSERT INTO @Table (ID, Value1, Value2, Value3)
SELECT 1, 'One', 'Uno', 'FIrst'
UNION ALL
SELECT 2, 'Two', 'Dos', 'Second'
UNION ALL
SELECT 3, 'One', 'Uno', 'Third'
UNION ALL
SELECT 4, 'Three', 'Tres', 'Fourth'


;WITH CTE_MY
AS
(
SELECT *, 
CASE
    WHEN COUNT(*) OVER (PARTITION BY  Value1, Value2) > 1 THEN 1
    ELSE 0
END AS Duplicate
FROM @Table
)

DECLARE @Table Table (ID int, Value1 varchar(50), Value2 varchar(50), Value3 varchar(50))
INSERT INTO @Table (ID, Value1, Value2, Value3)
SELECT 1, 'One', 'Uno', 'FIrst'
UNION ALL
SELECT 2, 'Two', 'Dos', 'Second'
UNION ALL
SELECT 3, 'One', 'Uno', 'Third'
UNION ALL
SELECT 4, 'Three', 'Tres', 'Fourth'


;WITH CTE_MY
AS
(
SELECT *, 
CASE
    WHEN COUNT(*) OVER (PARTITION BY  Value1, Value2) > 1 THEN 1
    ELSE 0
END AS Duplicate
FROM @Table
)

SELECT *, 
CASE WHEN (SELECT CAST(M1.Value3 AS VARCHAR(MAX)) + ' - ' +CAST(M2.Value3 AS VARCHAR(MAX)) FROM CTE_MY M2 WHERE M1.Value1 = M2.Value1 AND M1.ID <> M2.ID) = 'Third - FIrst' THEN 'FIrst - Third' ELSE 
(SELECT CAST(M1.Value3 AS VARCHAR(MAX)) + ' - ' +CAST(M2.Value3 AS VARCHAR(MAX)) FROM CTE_MY M2 WHERE M1.Value1 = M2.Value1 AND M1.ID <> M2.ID) END VALUE3
FROM CTE_MY M1
于 2013-10-08T11:33:26.857 に答える