2016-05-26 28 views
0

我要運行該SP,但它不工作,並給予誤差添加的選擇計數的臨時表

是分配一個值的變量不能與數據檢索相結合的SELECT語句操作。

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 

我想伯爵與SR_NO和日期添加爲每列臨時表。

注意對於目前我想添加日期24之間 - 我使用sql-server-2005

+0

'選擇@Total = COUNT(*),「合計」階段,...' - 那裏正試圖分配一個值的第一部分一個變量(如錯誤消息所述),下一部分將嘗試*返回*列值作爲結果集(數據檢索)的一部分。你不能在一個'SELECT'中做這兩件事。 –

+0

@Damien_The_Unbeliever:我在幾分鐘內更新我的問題作爲我想要的..讓我更新它,可能然後你會得到一個想法我想要什麼 – BNN

+0

你應該在@ SELECT語句中分配@Total變量 – Petaflop

回答

1

如果我理解

試試這個:

第一步:

創建表#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 

我想,因爲你想要計數器,這些都沒有鏈接到一個單一的SR_NO。

告訴我,如果它是確定的,否則我們可以調整查詢

+0

如何檢查記錄但 – BNN

+0

我不明白你的評論 –

+0

我執行你的查詢到我的程序。現在如何檢查查詢是否正確。是'select * from#temp'嗎? – BNN