如何在存储过程中输出两个选择查询?

问题描述 投票:0回答:1

我有两个查询试图放入存储过程中以在 SSRS 报告中使用。我研究过使用 UNION 但我认为你需要相同数量的列。在第一个查询中,我找到了参考表中每个国家/地区的值总数。

第二个查询是所有国家/地区列中所有值的总和(值的总数)。我需要这只是一行,因为它是总计,所以不需要多行。我尝试将这两者放入一个存储过程中的原因是为了输出一个包含报告所需的所有字段的游标。有人有什么建议吗?

SELECT
    M.CDE_COUNTRY || '-' || M.DESC_COUNTRY COUNTRY,
    SUM(CASE WHEN RED_CODE = 'R' THEN 1 ELSE 0 END),
    SUM(CASE WHEN BLUE_CODE = 'B' THEN 1 ELSE 0 END),
    SUM(CASE WHEN NA_CODE_1 = 'NA' THEN 1 ELSE 0 END),
    SUM(CASE WHEN PURPLE_CODE = 'P' THEN 1 ELSE 0 END),
    SUM(CASE WHEN GREEN_CODE = 'G' THEN 1 ELSE 0 END),
    SUM(CASE WHEN YELLOW_CODE = 'Y' THEN 1 ELSE 0 END),
    SUM(CASE WHEN NA_CODE_2 = 'NA' THEN 1 ELSE 0 END)
FROM 
    MASTER.T_COUNTRY M,
    PERSON.T_PERSON P,
    PERSON.T_CASE C
WHERE 
    TABLE_NAME IN ('H1')
    C.PERSON_ID = P.PERSON_ID
    M.CDE_COUNTRY = SUBSTR(LPAD(P.PERSON_ID,6,0)1,2)
GROUP BY 
    M.CDE_COUNTRY, M.DESC_COUNTRY COUNTRY;

第二个查询:

SELECT 
    SUM(CASE WHEN RED_CODE = 'R' THEN 1 ELSE 0 END),
    SUM(CASE WHEN BLUE_CODE = 'B' THEN 1 ELSE 0 END),
    SUM(CASE WHEN NA_CODE_1 = 'NA' THEN 1 ELSE 0 END),
    SUM(CASE WHEN PURPLE_CODE = 'P' THEN 1 ELSE 0 END),
    SUM(CASE WHEN GREEN_CODE = 'G' THEN 1 ELSE 0 END),
    SUM(CASE WHEN YELLOW_CODE = 'Y' THEN 1 ELSE 0 END),
    SUM(CASE WHEN NA_CODE_2 = 'NA' THEN 1 ELSE 0 END)
FROM 
    PERSON.T_PERSON P,
    PERSON.T_CASE C
WHERE 
    C.PERSON_ID = P.PERSON_ID;
sql oracle reporting-services ssrs-2008
1个回答
0
投票

我看到有两种方法可以做到这一点。您可以在第二个查询的 select 子句中添加一个空字段,例如

    SELECT 

    '',
    SUM(CASE WHEN RED_CODE = 'R' THEN 1 ELSE 0 END ),
    SUM(CASE WHEN BLUE_CODE = 'B' THEN 1 ELSE 0 END ),
    SUM(CASE WHEN NA_CODE_1 = 'NA' THEN 1 ELSE 0 END ),
    
    SUM(CASE WHEN PURPLE_CODE = 'P' THEN 1 ELSE 0 END ),
    SUM(CASE WHEN GREEN_CODE = 'G' THEN 1 ELSE 0 END ),
    SUM(CASE WHEN YELLOW_CODE = 'Y' THEN 1 ELSE 0 END ),
    SUM(CASE WHEN NA_CODE_2 = 'NA' THEN 1 ELSE 0 END )
    <other clauses here>

或者您可以加入您的两个查询,例如

SELECT <fields of first query here>, <fields of second query here>
FROM (first query) t1
JOIN (second query) t2
ON 1=1

当然,为重复的字段指定

t1.
t2.
,为子查询中的字段指定别名等

第一种方法将结果合并为两个记录,第一个记录代表第一个查询的结果,第二个记录代表第二个查询的结果。

第二种方法将得到一条记录,您可以在其中找到

t1
t2
的字段。

© www.soinside.com 2019 - 2024. All rights reserved.