2013-08-04 36 views
0

我已經在一天內做出了患者總數的rdlc報告,並且它工作正常。我有女性男性患者的總數,但是當報告綁定時,它返回的總數等於我的數據中的行數。
例如,如果我的報告中有20行,那麼當我打印計數時,它會返回20行中的計數。獲得rdlc報告中特定患者的總數

我怎樣才能得到它只在1行?

這是我使用的查詢:

SET ANSI_NULLS ON 
SET QUOTED_IDENTIFIER ON GO 

ALTER PROCEDURE [dbo].[Test_test_test]-- '2013/08/02' 
-- Add the parameters for the stored procedure here 
-- Add the parameters for the stored procedure here 
(@date VARCHAR(20)) 
AS 
    BEGIN 
     SET NOCOUNT ON; 
     SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 

     SELECT (CASE 
       WHEN OLD_NEW_PATIENT.OLD_NEW = 'new' THEN 
       PATIENT_REF_MASTER.PAT_ID 
       ELSE NULL 
       END)             AS 'new', 
      (CASE 
       WHEN OLD_NEW_PATIENT.OLD_NEW = 'old' THEN 
       PATIENT_REF_MASTER.PAT_ID 
       ELSE NULL 
       END)             AS 'old', 
      ---------------------------------------- 
      (CASE 
       WHEN GENDER_MASTER.NAME1 = 'Female' THEN GENDER_MASTER.NAME1 
       ELSE NULL 
       END)             AS 
      'Females', 
      (CASE 
       WHEN GENDER_MASTER.NAME1 = 'Male' THEN GENDER_MASTER.NAME1 
       ELSE NULL 
       END)             AS 'Males', 
      ------------------------------------- 
      CONVERT(VARCHAR, PATIENT_REF_MASTER.CREATION_DATE, 105) AS 
      'creation_Date', 
      PATIENT_REF_MASTER.SR_NO        AS 'sr_No', 
      PATIENT_MASTER.PAT_FNAME + ' ' 
      + PATIENT_MASTER.PAT_SNAME        AS 'NAME', 
      DEPT_ID             AS 
      'Dept_ID', 
      DEPT_MASTER.DEPT_NAME         AS 
      'Dept_Name', 
      DOC_MASTER.DOC_ID          AS 
      'Doc_Master', 
      DOC_MASTER.DOC_FNAME + ' ' 
      + DOC_MASTER.DOC_SNAME         AS 
      'Doc_Name' 
      , 
      PATIENT_MASTER.PAT_ADDR 
      AS 'addr', 
      GENDER_MASTER.NAME1          AS 
      'Pat_Sex', 
      PATIENT_MASTER.AGE          AS 'age', 
      (SELECT Count(PATIENT_REF_MASTER.SR_NO) 
       FROM PATIENT_REF_MASTER 
       WHERE PATIENT_REF_MASTER.CREATION_DATE = @date)  AS 'count', 
      (SELECT Count(PATIENT_MASTER.PAT_SEX) 
       FROM PATIENT_MASTER 
        LEFT JOIN PATIENT_REF_MASTER 
          ON PATIENT_REF_MASTER.PAT_ID = 
           PATIENT_MASTER.PAT_CODE 
       WHERE PATIENT_REF_MASTER.CREATION_DATE = @date 
        AND PATIENT_MASTER.PAT_SEX = 2)     AS 
      'F_count', 
      (SELECT Count(PATIENT_MASTER.PAT_SEX) 
       FROM PATIENT_MASTER 
        LEFT JOIN PATIENT_REF_MASTER 
          ON PATIENT_REF_MASTER.PAT_ID = 
           PATIENT_MASTER.PAT_CODE 
       WHERE PATIENT_REF_MASTER.CREATION_DATE = @date 
        AND PATIENT_MASTER.PAT_SEX = 1)     AS 
      'M_count' 
     FROM PATIENT_REF_MASTER 
      LEFT JOIN DBO.OLD_NEW_PATIENT 
        ON DBO.OLD_NEW_PATIENT.CODE = PATIENT_REF_MASTER.OLD_NEW 
      LEFT JOIN DBO.DEPT_MASTER 
        ON DEPT_MASTER.DEPT_CODE = PATIENT_REF_MASTER.DEPT_ID 
      LEFT JOIN PATIENT_MASTER 
        ON PATIENT_MASTER.PAT_CODE = PATIENT_REF_MASTER.PAT_ID 
      LEFT JOIN DOC_MASTER 
        ON DOC_MASTER.DOC_ID = PATIENT_REF_MASTER.DOC_ID 
      LEFT JOIN GENDER_MASTER 
        ON GENDER_MASTER.CODE = PATIENT_MASTER.PAT_SEX 
     WHERE PATIENT_REF_MASTER.CREATION_DATE = @date 
     --MONTH(Patient_Ref_master.creation_Date)[email protected] and [email protected] 
     ORDER BY PATIENT_REF_MASTER.SR_NO ASC 
    -- select Dept_Master.Dept_Name as 'Dept_Name', 
    -- count(Pat_ID) as 'Pat_ID' 
    -- 
    -- from Patient_Ref_master 
    --left join dbo.Dept_Master on Dept_Master.Dept_code = Patient_Ref_master.Dept_ID 
    --where MONTH(Patient_Ref_master.creation_Date)[email protected] and [email protected] 
    --group by Dept_Master.Dept_Name 
    END 
+0

你可以包含你現在使用的查詢嗎? – Gidil

+0

@Gidil:當然。看我的編輯。 – Ankur

回答

1

我想你想在一次;-)

你的問題的心臟做很多事情就出在這裏:

SELECT Count(PATIENT_MASTER.PAT_SEX) 
       FROM PATIENT_MASTER 
        LEFT JOIN PATIENT_REF_MASTER 
          ON PATIENT_REF_MASTER.PAT_ID = 
           PATIENT_MASTER.PAT_CODE 
       WHERE PATIENT_REF_MASTER.CREATION_DATE = @date 
        AND PATIENT_MASTER.PAT_SEX = 1 

通過在您的查詢中使用此查詢,它會返回每一行中的總數。這也是爲什麼你可以通過編寫查詢而不使用GROUP BY子句逃脫。
我建議你在這個查詢中做所有的工作,但計數除外,然後在這個計數以外使用另一個查詢。

第二個問題是,在您的查詢中,您正在請求關於每一行的幾個細節,但您希望它回到一行。你必須決定你想要什麼;)。

爲了得到公正一行計數,嘗試這樣的事情:

SET ANSI_NULLS ON 
SET QUOTED_IDENTIFIER ON GO 

ALTER PROCEDURE [dbo].[Test_test_test]-- '2013/08/02' 
-- Add the parameters for the stored procedure here 
-- Add the parameters for the stored procedure here 
(@date VARCHAR(20)) 
AS 
    BEGIN 
     SET NOCOUNT ON; 
     SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 

     SELECT Count(*) count, 
      Sum(CASE 
        WHEN FEMALES IS NOT NULL THEN 1 
        ELSE 0 
       END) F_Count, 
      Sum(CASE 
        WHEN MALES IS NOT NULL THEN 1 
        ELSE 0 
       END) M_Count 
     FROM (SELECT (CASE 
         WHEN OLD_NEW_PATIENT.OLD_NEW = 'new' THEN 
         PATIENT_REF_MASTER.PAT_ID 
         ELSE NULL 
         END)             AS 
        'new', 
        (CASE 
         WHEN OLD_NEW_PATIENT.OLD_NEW = 'old' THEN 
         PATIENT_REF_MASTER.PAT_ID 
         ELSE NULL 
         END)             AS 
        'old', 
        ---------------------------------------- 
        (CASE 
         WHEN GENDER_MASTER.NAME1 = 'Female' THEN 
         GENDER_MASTER.NAME1 
         ELSE NULL 
         END)             AS 
        'Females', 
        (CASE 
         WHEN GENDER_MASTER.NAME1 = 'Male' THEN 
         GENDER_MASTER.NAME1 
         ELSE NULL 
         END)             AS 
        'Males', 
        ------------------------------------- 
        CONVERT(VARCHAR, PATIENT_REF_MASTER.CREATION_DATE, 105) AS 
          'creation_Date', 
        PATIENT_REF_MASTER.SR_NO        AS 
        'sr_No', 
        PATIENT_MASTER.PAT_FNAME + ' ' 
        + PATIENT_MASTER.PAT_SNAME        AS 
        'NAME' 
        , 
        DEPT_ID 
        AS 'Dept_ID', 
        DEPT_MASTER.DEPT_NAME         AS 
        'Dept_Name', 
        DOC_MASTER.DOC_ID          AS 
        'Doc_Master', 
        DOC_MASTER.DOC_FNAME + ' ' 
        + DOC_MASTER.DOC_SNAME         AS 
        'Doc_Name', 
        PATIENT_MASTER.PAT_ADDR         AS 
        'addr' 
        , 
        GENDER_MASTER.NAME1 
        AS 'Pat_Sex', 
        PATIENT_MASTER.AGE          AS 
        'age' 
       FROM PATIENT_REF_MASTER 
        LEFT JOIN DBO.OLD_NEW_PATIENT 
          ON DBO.OLD_NEW_PATIENT.CODE = 
           PATIENT_REF_MASTER.OLD_NEW 
        LEFT JOIN DBO.DEPT_MASTER 
          ON DEPT_MASTER.DEPT_CODE = 
           PATIENT_REF_MASTER.DEPT_ID 
        LEFT JOIN PATIENT_MASTER 
          ON PATIENT_MASTER.PAT_CODE = 
           PATIENT_REF_MASTER.PAT_ID 
        LEFT JOIN DOC_MASTER 
          ON DOC_MASTER.DOC_ID = PATIENT_REF_MASTER.DOC_ID 
        LEFT JOIN GENDER_MASTER 
          ON GENDER_MASTER.CODE = PATIENT_MASTER.PAT_SEX 
       WHERE PATIENT_REF_MASTER.CREATION_DATE = @date 
      --MONTH(Patient_Ref_master.creation_Date)[email protected] and [email protected] 
      )T 
     ORDER BY PATIENT_REF_MASTER.SR_NO ASC 
    END 

我希望這可以幫助,讓我知道如果你需要任何更多的信息。

編輯

發現在我張貼的查詢一個小小的失誤,字段名應該已經FEMALES沒有FEMALEMALES沒有MALE

我還在SQL Fiddle中設置了縮小比例。看看並告訴我你的想法。

+0

在SELECT COUNT給錯誤(*)計數, 薩姆(CASE WHEN FEMALE IS NOT NULL THEN 1 ELSE 0 END)F_Count, 薩姆(CASE WHEN MALE IS NOT NULL THEN 1 ELSE 0 END)M_Count – Ankur

+0

看看我更新的答案。我希望它有幫助。 – Gidil

+0

仍然給出錯誤「Msg 4104,Level 16,State 1,Procedure Test_test_test,Line 73 無法綁定多部分標識符」PATIENT_REF_MASTER.SR_NO「。」 – Ankur