0

我已经对一天内的患者总数进行了 rdlc 报告,并且效果很好。我有女性男性患者的总数,但是当报告绑定时,它返回的总数等于我数据中的行数。
例如,如果我的报告中有 20 行,那么当我打印计数时,它会在 20 行中返回计数。

我怎样才能让它只有 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)=@month and Dept_ID=@dept 
      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)=@month and Dept_ID=@dept 
  --group by Dept_Master.Dept_Name 
  END 
4

1 回答 1

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)=@month and Dept_ID=@dept 
             )T 
      ORDER  BY PATIENT_REF_MASTER.SR_NO ASC 
  END 

我希望这会有所帮助,如果您需要更多信息,请告诉我。

编辑

在我发布的查询中发现一个小错误,字段名称应该是FEMALESnotFEMALEMALESnot MALE

我还在SQL Fiddle中设置了一个按比例缩小的示例。看看,告诉我你的想法。

于 2013-08-04T07:09:46.040 回答