2016-05-26 3 views
0

Ich möchte diesen SP laufen, aber es funktioniert nicht und geben Fehler alsFügen Sie die Anzahl der Auswahl in temporären Tabelle

Eine SELECT-Anweisung, die einen Wert einer Variablen zugewiesen darf nicht mit Datenabruf kombiniert werden Operationen.

ALTER PROCEDURE GET_RECORDS_FORDATE 

      @From_date Datetime, 
      @To_date Datetime 

      AS 
      BEGIN 


       SELECT * 
      INTO #temp 
      FROM ( 
        select 0 SR_NO, 0 date, 0 Total, 0 Inward, 0 First_Level_Transfer, 0 Data_Entry_Transfer, 
          0 Second_Level_Transfer, 0 Outward_Transfer, 
          0 Closed, 0 Communication_Transfer 
        from inward_doc_tracking_hdr 
      ) AS x 


      select count(*) tot_count,'Total' stage from inward_doc_tracking_hdr 
      where 
      doc_date between convert(datetime, @From_date ,103) 
       and convert(datetime, @To_date, 103) 

      select count(*) tot_count,'Inward' stage from inward_doc_tracking_hdr 
      where 
      doc_date between convert(datetime, '24/05/2016',103) 
      and convert(datetime, '26/05/2016', 103) 
      and status_flag in ('6') 

      select count(*) tot_count,'1st Level Transfer' stage from inward_doc_tracking_hdr 
      where doc_date between convert(datetime, '24/05/2016',103) 
      and convert(datetime, '26/05/2016', 103) 
      and status_flag in ('4','26','24') 

      select count(*) tot_count,'Data Entry Transfer' stage from inward_doc_tracking_hdr 
      where doc_date between convert(datetime, '24/05/2016',103) 
      and convert(datetime, '26/05/2016', 103) 
      and status_flag in ('15','20') 

      select count(*) tot_count,'2nd Level Transfer' stage from inward_doc_tracking_hdr 
      where doc_date >=convert(datetime,'24/05/2016',103) 
      and status_flag in ('17','21') 

      select count(*) tot_count,'Outward Transfer' stage from inward_doc_tracking_hdr 
      where doc_date >=convert(datetime,'24/05/2016',103) 
      and status_flag='18' 

      select count(*) tot_count,'Close' stage from inward_doc_tracking_hdr 
      where doc_date between convert(datetime, '24/05/2016',103) 
       and convert(datetime, '26/05/2016', 103) 
      and status_flag='5' 


      select count(*) tot_count,'Communication Transfer' stage from inward_doc_tracking_hdr 
      where doc_date between convert(datetime, '24/05/2016',103) 
       and convert(datetime, '26/05/2016', 103) 
      and status_flag='16' 
    END 


    SELECT * FROM #temp 
    END 

Ich mag mit SR_NO und Datum der Graf nach der Spalte in temporärer Tabelle hinzuzufügen.

HINWEIS Für Vorerst i für Datum hinzugefügt werden soll zwischen 24-26

I sql-server-2005

+0

'wählen @Total = count (*),‚Total‘Bühne, ...' - der erste Teil gibt einen Wert versucht zuzuweisen eine Variable (wie die Fehlermeldung sagt), versucht der nächste Teil, einen Spaltenwert als Teil einer Ergebnismenge (Datenabruf) * zurückzugeben. Du darfst nicht beides in einem einzigen SELECT tun. –

+0

@Damien_The_Unbeliever: Ich aktualisiere meine Frage in wenigen Minuten als was ich will .. lass mich aktualisieren, vielleicht wirst du dann eine Idee bekommen, was ich will – BNN

+0

Sie sollten die Variable @Total in einer anderen SELECT-Anweisung – Petaflop

Antwort

1

bin mit Wenn ich

Versuchen Sie dies verstanden haben:

Erster Schritt :

Erstellen der Tabelle #temp

CREATE TABLE #temp(
    date datetime, Total int, Inward int, First_Level_Transfer int, 
    Data_Entry_Transfer int, 
    Second_Level_Transfer int, Outward_Transfer int, 
    Closed int, Communication_Transfer int 
) 

INSERT INTO #temp 
(date, Total, Inward, First_Level_Transfer, 
    Data_Entry_Transfer, 
    Second_Level_Transfer, Outward_Transfer, 
    Closed, Communication_Transfer) 
SELECT 
    doc_date, COUNT(*), 
    SUM(
    CASE 
     WHEN status_flag = '6' THEN 1 ELSE 0 
    END), 
    SUM(
    CASE 
     WHEN status_flag in ('4','26','24') THEN 1 ELSE 0 
    END), 
    SUM(
    CASE 
     WHEN status_flag in ('15','20') THEN 1 ELSE 0 
    END), 
    SUM(
    CASE 
     WHEN status_flag in ('17','21') THEN 1 ELSE 0 
    END), 
    SUM(
    CASE 
     WHEN status_flag='18' THEN 1 ELSE 0 
    END), 
    SUM(
    CASE 
     WHEN status_flag='5' THEN 1 ELSE 0 
    END), 
    SUM(
    CASE 
     WHEN status_flag='16' THEN 1 ELSE 0 
    END) 
FROM inward_doc_tracking_hdr 
WHERE doc_date between @From_date and @To_date AND status_flag <> '6' 
GROUP BY doc_date 

Ich denke, weil Sie Zähler wollen, sind diese nicht mit einer einzigen SR_NO verknüpft. Sag mir

wenn es in Ordnung ist, sonst können wir die Abfrage-

+0

, wie die Datensätze überprüfen, aber – BNN

+0

Ich verstehe nicht Ihre Kommentar –

+0

Ich führte Ihre Abfrage in meine Prozedur aus. Nun, wie überprüft man, ob die Abfrage korrekt ist oder nicht. ist es 'wählen * von # temp'? – BNN

Verwandte Themen