2013-05-06 57 views
0

仅选择唯一发票。根据特定列选择唯一列;浓缩

我有如下表:


Invoice Date Invoice No Description      PO No   Order No   Amount Credit Total 
2013-04-26  T641913 PURCH/GRIP/SHOWCARD    LG5582   T196786    314.25  0 314.25 
2013-04-26  T641914 PURCH/GRIP/SASH & TAPE   LG5593   T196855    251.20  0 251.20 
2013-04-26  T641915 PURCH/LTG/BULB & RECEIVERS  LG5595   T196858    202.59  0 202.59 
2013-04-26  T641916 PURCH/GRIP/STYRO & SILENT GRID LG 5599   T196888    257.81  0 257.81 
2013-04-26  T641  MAIN HEAD       LG 5580   T192282    147725.62 0 147725.62 
2013-04-26  T641  MAIN HEAD       LG 5649   T196707    147725.62 0 147725.62 
2013-04-26  T641  MAIN HEAD       LG 5580   T192279    147725.62 0 147725.62 
2013-04-26  T641  MAIN HEAD       LG 5580   T192280    147725.62 0 147725.62 

我需要凝结,只有通过唯一的发票#选择。由此产生的表应该如下所示:


Invoice Date Invoice No Description      PO No   Order No   Amount Credit Total 
2013-04-26  T641913 PURCH/GRIP/SHOWCARD    LG5582   T196786    314.25  0 314.25 
2013-04-26  T641914 PURCH/GRIP/SASH & TAPE   LG5593   T196855    251.20  0 251.20 
2013-04-26  T641915 PURCH/LTG/BULB & RECEIVERS  LG5595   T196858    202.59  0 202.59 
2013-04-26  T641916 PURCH/GRIP/STYRO & SILENT GRID LG 5599   T196888    257.81  0 257.81 
2013-04-26  T641  MAIN HEAD       MULTI   MULTI    147725.62 0 147725.62 

不知道该怎么做:S请帮助!!

回答

2
SELECT [Invoice Date], 
    [Invoice No], 
    Description, 
    [PO No] = CASE WHEN COUNT(1) > 1 THEN 'MULTI' ELSE MAX([PO No]) END, 
    [Order No] = CASE WHEN COUNT(1) > 1 THEN 'MULTI' ELSE MAX([Order No]) END, 
    Amount, 
    Credit, 
    Total 
FROM Invoices 
GROUP BY [Invoice Date], 
    [Invoice No], 
    Description, 
    Amount, 
    Credit, 
    Total 

SQL Fiddle with demo

+0

+1:我回答了这个问题了,但是这个做同样的事情,更简洁。 – 2013-05-06 19:44:32

1

这里的CTE答案...

With cte As 
(
     Select Count(1) As i, 
       [Invoice No], 
       'MULTI' As val 
     From [Table] 
     Group By [Invoice No] 
     Having Count(1) > 1 
) 
Select Distinct 
     t.[Invoice Date], 
     t.[Invoice No], 
     t.[Description], 
     IsNull(c.val,t.[PO No]) As [PO No], 
     IsNull(c.val,t.[Order No]) As [Order No], 
     t.[Amount], 
     t.[Credit], 
     t.[Total] 
From [Table] t 
Left Join cte c 
     On t.[Invoice No] = c.[Invoice No]