【问题标题】:How to return one row with multiple column values?如何返回具有多个列值的一行?
【发布时间】:2016-08-10 05:24:02
【问题描述】:

我正在尝试创建一个每个客户一行的报告,但是每个客户有多个行。

当前视图是:

Customer    Business    Dept    Type    Status
-----------------------------------------------
019        Public       null    null    null         
019         null        IT      null    null
019         null        null    Retail  0 --char(1) 

我想要的视图是:

Customer    Business    Dept    Type    Status
-----------------------------------------------
019        Public       IT      Retail   0

我使用的是 SQL Server 2008 R2。我的数据集中有更多列,但这是一个示例。当我的数据类型是字符而不是基于 INT 时,我不确定如何获得结果。

【问题讨论】:

    标签: sql sql-server select


    【解决方案1】:

    如果这是一个具有代表性的示例,并且每列总是有一个带有值的行,而其他列将有 nulls,您可以使用聚合 maxmin,忽略 null年代:

    SELECT   customer, MAX(business), MAX(dept), MAX(type), MAX(status)
    FROM     mytable
    GROUP BY customer
    

    【讨论】:

    • 我知道我试图让行/分区函数工作过于复杂,谢谢!!!
    【解决方案2】:

    试试这个:

    CREATE TABLE #tmp ([Customer] CHAR(3), [Business] VARCHAR(20), [Dept] VARCHAR(20), [Type] VARCHAR(20), [Status] CHAR(1))
    INSERT INTO #tmp (Customer, Business) VALUES (  '019',  'Public')
    INSERT INTO #tmp (Customer,Dept) VALUES ('019','IT')
    INSERT INTO #tmp (Customer,[Type]) VALUES ('019','Retail')
    INSERT INTO #tmp (Customer,[Status]) VALUES ('019','0')
    SELECT * FROM #tmp AS t
    
    SELECT t.Customer, t.Business, t2.Dept, t3.[Type], t4.[Status] FROM #tmp AS t 
    JOIN #tmp AS t2 ON t2.Customer = t.Customer 
    JOIN #tmp AS t3 ON t3.Customer = t.Customer
    JOIN #tmp AS t4 ON t4.Customer = t.Customer
    WHERE t.Business IS NOT NULL AND t2.Dept IS NOT NULL AND t3.[Type] IS NOT NULL AND t4.[Status] IS NOT NULL 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-24
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多