使用union - Noob在存储过程中多次选择

时间:2013-04-10 06:22:02

标签: sql-server stored-procedures reporting-services union

我已经找到了答案,但发现自己更加困惑。我不是那么有经验 - 但工作人员很少 - 只是我创建报告 - 我必须创建它。

客户要求提交一份报告,该报告将返回存储在2个数据库中的调查问题的MTD答案。问题是 - 他们希望附加到每个提交的答案的记录不属于调查的一部分。即每个受访者都有关于他们拥有什么类型的电话,他们居住的区域,电话型号和服务日期的信息。 (虽然这些不是答案)

其中许多都是独一无二的。 (模型和城市)

例如,我在SQL中创建了一个存储过程以引入SSRS以显示结果。

但每一个都是选择,我只得到第一个结果。我尝试添加UNION ALL,但是当我这样做时,它似乎不允许我将它们分组。我将所有内容都放在一列中,我需要它们在不同的列中 - 理想地水平。但这可能要求太多。

这是一个例子 - 也许有一个更快的方法 - 这是一个可怕的项目 - 我的截止日期现在很短 - 我尝试了很多东西 - 并且搜索。除了寻求帮助之外别无选择。

所以这就是我所拥有的 -

ALTER PROCEDURE [dbo].[TEST_WIRELESS_DISCO_SURVEY_RESULTS]
(
   @STARTDATE DATETIME,
   @ENDDATE DATETIME
)
AS
BEGIN
   SELECT 
       a.CUSTOM17 as 'Make', COUNT(ISNULL(A.custom17, 0)) as 'Total Make'
   FROM GCI_SURVEYS as a
   JOIN GCI_Post_Survey_PreRepair_Master as b ON a.CustAcctNo = b.CustAcctNo
   WHERE b.Trans_Date between @STARTDATE and @ENDDATE
     AND a.i3_rowid = 'GCI_WRLSDISC_BSV'
     AND a.Q01 = 'no'
   GROUP BY  CUSTOM17

   UNION ALL

   SELECT 
       a.CUSTOM22 as 'Market', COUNT(ISNULL(a.CUSTOM22, 0)) as 'Total Market'
   FROM GCI_SURVEYS  as a
   JOIN GCI_Post_Survey_PreRepair_Master as b ON a.CustAcctNo = b.CustAcctNo
   WHERE b.Trans_Date between @STARTDATE  and @ENDDATE
     AND a.i3_rowid = 'GCI_WRLSDISC_BSV'
     AND a.Q01 = 'no'
   GROUP BY  a.CUSTOM22

2 个答案:

答案 0 :(得分:0)

问题中,您声明要从两个数据库

中获取数据

返回存储在2个数据库中的调查问题的MTD答案

在您 SP 中,您正在选择数据库

只需在您的Select Query

中添加数据库名称即可

答案 1 :(得分:0)

根据你的解释,我认为联盟的顶部和底部包含相同的调查,只是不同的部分?

我个人会将它们加载到变量表中(或者如果有很多记录,临时表),然后将它们连接在一起。

DECLARE @MakeQuestion TABLE
(
  survery_id INT --datatype
 ,make       VARCHAR(200) --replace with your own
 ,total_make INT
)

INSERT INTO @MakeQuestion
SELECT a.join_condition, a.CUSTOM17 as 'Make',COUNT(ISNULL(A.custom17,0)) as 'Total Make'
FROM GCI_SURVEYS as a
JOIN GCI_Post_Survey_PreRepair_Master as b
ON a.CustAcctNo = b.CustAcctNo
WHERE b.Trans_Date between @STARTDATE and @ENDDATE
AND a.i3_rowid = 'GCI_WRLSDISC_BSV'
AND a.Q01 = 'no'
GROUP BY  a.join_condition,CUSTOM17

DECLARE @MarketQuestion TABLE
(
  survery_id  INT -- datatype
 ,market        VARCHAR(200) --replace with your own
 ,total_market INT
)

Insert INTO @MarketQuestion
SELECT  a.join_condition, a.CUSTOM22 as 'Market',COUNT(ISNULL(a.CUSTOM22,0)) as 'Total Market'
FROM GCI_SURVEYS  as a
JOIN GCI_Post_Survey_PreRepair_Master as b
ON a.CustAcctNo = b.CustAcctNo
WHERE b.Trans_Date between @STARTDATE  and @ENDDATE
AND a.i3_rowid = 'GCI_WRLSDISC_BSV'
AND a.Q01 = 'no'
GROUP BY  a.CUSTOM22

SELECT *
FROM @MakeQuestion Make
INNER JOIN @MarketQuestion Market ON Make.survey_id = Market.survery_id

如果我误解了,请告诉我。