2013-05-06 4 views
0

Sélection de factures uniques uniquement.Sélectionnez une colonne unique basée sur une colonne particulière; condenser

J'ai le tableau suivant:


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 

J'ai besoin de condenser et sélectionnez seulement par la facture unique #. Le tableau résultant devrait ressembler à ceci:


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 

Vous ne savez pas comment faire: S S'il vous plaît, aidez !!

Répondre

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: Je répondu à la question aussi, mais cela fait la même chose et est plus succinct. –

1

Voici une réponse 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] 
Questions connexes