【问题标题】:Adding values based on duplicated data基于重复数据添加值
【发布时间】:2016-08-30 01:49:49
【问题描述】:

这是我的第一篇文章,我希望你一切都清楚。我有这样的表:

client ; cost 
Paula  ; 100
Paula  ; 50
Jacob  ; 300
Paula  ; 120

我想添加另一列“client2”,如果没有重复,或者如果有重复,它的值将为 1,仅对于成本最高的重复,它应该为 1,所以:

client ; cost ; client2
Paula  ; 100  ; 0
Paula  ; 50   ; 0
Jacob  ; 40   ; 1
Paula  ; 120  ; 1

在实际表中有 2000 条记录。我应该如何在 SQL Server 中编写它?提前致谢, 宝拉

【问题讨论】:

  • 如果有相同成本的副本怎么办......会有这样的条目吗?

标签: sql sql-server sql-server-2008 duplicates


【解决方案1】:
WITH CTE AS
    (SELECT
        client,
        cost,
        ROW_NUMBER() OVER (PARTITION BY client ORDER BY cost DESC) AS RowNo
    FROM
        table)
SELECT
    client,
    cost,
    CASE RowNo
        WHEN 1 THEN 1
        ELSE 0
    END AS client2
FROM
    CTE;

【讨论】:

    【解决方案2】:

    您可以使用cursor 来完成此操作。下面的例子应该处理你想要的。您必须将 #table 替换为您的表的名称。像罪恶一样丑陋,但它有效;)

     CREATE TABLE #Table
    (
      client NVARCHAR(100),
      cost int,
      client1 int
    );
    
    INSERT INTO #Table
    VALUES
    ('Paula',100,null),
    ('Paula',50,null),
    ('Jacob',300,null),
    ('Paula',120,null);
    
    DECLARE @clientColumn nvarchar(100);
    DECLARE @Dup int;
    
    DECLARE client_cursor CURSOR FOR 
    SELECT client,cost FROM #Table ORDER BY client,cost
    
    OPEN client_cursor;
    FETCH NEXT FROM client_cursor INTO @clientColumn
    
    WHILE @@FETCH_STATUS=0
    BEGIN
    
    set @dup = (SELECT TOP 1 cost FROM #Table WHERE client = @clientColumn GROUP BY client ORDER BY cost desc )
    
    UPDATE #Table
    SET
        client1 = 1 
    WHERE client = @clientColumn AND cost = @dup     
    
    FETCH NEXT FROM client_cursor INTO @clientColumn
    END
    CLOSE client_cursor 
    DEALLOCATE  client_cursor;
    
    UPDATE #Table
    SET
        client1 = 0
        WHERE client1 IS NULL
    
    SELECT * FROM #Table 
    

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 2017-11-19
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      相关资源
      最近更新 更多