2016-04-29 18 views
-1

Ich versuche, den Unterschied zwischen Datensatz zählt zu ermitteln, wo ich nur zwei verschiedene Datensatztypen haben. Ich möchte nach dem Datum die Anzahl der Datensatz für jeden Datensatztyp und Gruppe zeigen:Willst du Unterschied Datensatzanzahl in SQL Server 2008 berechnen

select 
    CONVERT(VARCHAR(5), aa.RUN_DATE, 1) AS 'RUN_Date', 
    case 
     when aa.SOURCE = 2 
      then 'RD' 
      else 'JD' 
    end as 'Source', 
    COUNT(*) as 'Item_Count' 
from 
    clientdb.inventory aa with(nolock) 
inner join 
    clientdb.record_type bb with(nolock) on aa.REC_TYPE = bb.OBJECT_ID 
where 
    aa.RUN_DATE > '2016-04-15' 
    and aa.CLIENT_NUMBER = 65432 
group by 
    case 
     when aa.SOURCE = 2 
      then 'RD' 
      else 'JD' 
    end, CONVERT(VARCHAR(5), aa.RUN_DATE, 1) 
order by 
    CONVERT(VARCHAR(5), aa.RUN_DATE, 1) desc, 
    case 
     when aa.SOURCE = 2 
      then 'RD' 
      else 'JD' 
    end 

ich die Ergebnisse möchte in irgendeiner Weise ähnlich wie diese erscheinen:

results

Verwendung von SQL Server 2008 Datenbank. Kann jemand helfen?

+0

Set [Bad Habits treten - Putting NOLOCK überall] hilft (http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - Es ist *** NICHT EMPFOHLEN ***, dies überall zu benutzen - im Gegenteil! –

Antwort

0

Dies sieht wie eine Situation aus, in der Sie UNPIVOT verwenden könnten.

Dies ist die Annahme, Sie können Ihre Daten auf eine Struktur ähnlich zusammenfassen, was ich unten erstellt ...

RUN_Date JD   RD   Difference 
---------- ----------- ----------- ----------- 
2016-04-29 163   263   100 
2016-04-28 178   271   93 
2016-04-27 95   271   176 

Für die Zwecke dieses Beispiels das folgende Skript wird diese Tabelle erstellen ...

create table BaseSummary 
(
    RUN_Date date, 
    JD int, 
    RD int, 
    Difference int 
) 

insert into BaseSummary values ('04/29/2016', 163, 263, 100) 
insert into BaseSummary values ('04/28/2016', 178, 271, 93) 
insert into BaseSummary values ('04/27/2016', 95, 271, 176) 

Hier ist die SQL-Anweisung UNPIVOT verwenden zu bekommen, was Sie suchen ...

select RUN_Date, left(Source, 16) as Source, Item_Count 
from 
(
    select RUN_Date, JD, RD, Difference 
    from BaseSummary 
) p 
UNPIVOT 
(
    Item_Count for Source in 
     (JD, RD, Difference) 
) as unpvt 
order by RUN_Date desc 

Was ergibt dies ...

RUN_Date Source   Item_Count 
---------- ---------------- ----------- 
2016-04-29 JD    163 
2016-04-29 RD    263 
2016-04-29 Difference  100 
2016-04-28 JD    178 
2016-04-28 RD    271 
2016-04-28 Difference  93 
2016-04-27 JD    95 
2016-04-27 RD    271 
2016-04-27 Difference  176 

So könnten Sie Ihre Daten ein Einsatz an einen Tisch oder sogar eine temporäre Tabelle zusammenfassen und „BaseSummary“ mit Ihrem Tisch ersetzen. Ich habe das nicht getestet, aber ich sehe keinen Grund, warum Sie die Abfrage, die mit "p" versehen ist, nicht einfach durch Ihre zusammenfassende Abfrage ersetzen können.

Hope this,

Noel