0

我有 2 个表......它们基本上是相同的,除了其中一个中的列名,因为它们处理 2 个不同的名称,但是......我想要的数据在具有相同名称的列中。几乎我想要做的是......它们也需要是不同的,所以我不计算重复......我可以将它们作为单独的表......但我不能把它们放在一起......我需要它们在 1 列中,因为它是如何被发送到 C3 代码页以及它是如何读取它的……结构之前已经设置好了……并且在这样的一个存储过程中正在执行大约 5 条其他语句(我也不是设置这个的人)。所以如果这是可能的..请让我知道..如果您想看到真实的代码,我也会粘贴我的确切代码..我只是试图简化它以使其更容易理解。一世'

图 1 是当前设置的内容:

http://imgur.com/h0rNU

顶部是存储在表中的内容。底部是更多的结果,它基本上运行此代码以获取底部

DECLARE @id INT;
DECLARE @invest nvarchar(50);
SET @id = '7633';
SET @invest = '';

SELECT 'a' + CONVERT(nvarchar, orderfindings.risk_rating) AS cat, COUNT(DISTINCT orderfindings.prnt_id) AS stat
    FROM orderheader, orderaudits, orderfindings
    WHERE orderheader.id = orderaudits.orderheader_id AND orderaudits.ID = orderfindings.prnt_id
    AND orderheader.id = @id AND orderfindings.risk_rating > 0 AND orderaudits.Investor_Name LIKE '%' + @invest + '%'
    GROUP BY orderfindings.risk_rating

如果我想要机构而不是调查结果..只需替换它..机构和调查结果是两张表..它们在列方面几乎相同...但我希望将结果放在一起..我尝试了几种方法..但我似乎无法得到它图像 2-底部的表格是我正在寻找的更多..它将它们组合成 1:

http://imgur.com/a4qXW

如果订单中有发现或机构或两者兼而有之..那么它被标记为该风险等级的 1...如果它没有..那么该风险等级为 0..然后将它们加起来看看我得到了什么.. 任何帮助表示赞赏.. 如果你不明白,我会澄清我能做的;

编辑:
我一直在使用它..这个http://pastebin.com/117Z2TVh ..让它显示2列..但仍然不是正确的结果...我得到a1 = 1。 ..a2 = 1 ......所以它没有运行所有订单......或者它需要一种方法来计算它......我在case语句的开头加上了一个总和......因为计数而出错......所以我计算出来...并没有真正起作用..有什么建议吗?

4

2 回答 2

1

您是否尝试过使用 UNION 子句?

如果您不熟悉:http: //msdn.microsoft.com/en-us/library/ms180026.aspx

基本上,您编写两个查询,返回 UNION 任一侧有问题的两列之一,并将它们作为最终结果集中的一列返回。如果列名不同,则在任一侧为它们别名,以便它们可以组合在最终的联合结果集中。

于 2012-04-12T19:37:53.953 回答
0

; 发现 AS (select oa.id, oa.Risk_Rating, COUNT (orf.Prnt_ID) Findingcount FROM orderaudits oa LEFT JOIN orderfindings orf on oa.ID = orf.Prnt_ID --WHERE oa.risk_rating > 0 and oa.Investor_Name like ' %' + @invest + '%' GROUP BY oa.id, oa.Risk_Rating), Agency AS (select oa.id, oa.Risk_Rating, COUNT (ora.Prnt_ID) Agencycount FROM orderaudits oa LEFT JOIN orderagencies or on oa.ID = ora.Prnt_ID --WHERE oa.risk_rating > 0 and oa.Investor_Name like '%' + @invest + '%' GROUP BY oa.id, oa.Risk_Rating) /* SELECT 'Finding Only', oa.Risk_Rating, COUNT (oa.id) as a, SUM(CASE WHEN f.findingcount >0 then 1 ELSE 0 END ) as b FROM orderaudits oa LEFT JOIN find f ON oa.id = f.id LEFT JOIN orderheader oh ON oh.id = oa.orderheader_id WHERE oh.id = @id and oa.risk_rating > 0 and oa.Investor_Name like '%' + @invest + '%' GROUP BY oa.Risk_Rating

联合所有

SELECT 'Agency Only', oa.Risk_Rating, COUNT(oa.id) as a, SUM(CASE WHEN a.agencycount > 0 then 1 ELSE 0 END ) as b FROM orderaudits oa LEFT JOIN Agency a ON oa.id = a。 id LEFT JOIN orderheader oh ON oh.id = oa.orderheader_id WHERE oh.id = @id and oa.risk_rating > 0 and oa.Investor_Name like '%' + @invest + '%' GROUP BY oa.Risk_Rating

UNION ALL */ --Together SELECT 'aa' + convert(nvarchar, oa.risk_rating) as cat, SUM(CASE WHEN f.findingcount > 0 OR a.agencycount > 0 then 1 ELSE 0 END ) as b FROM orderaudits oa LEFT JOIN find f ON oa.id = f.id LEFT JOIN Agency a ON oa.id = a.id LEFT JOIN orderheader oh ON oh.id = oa.orderheader_id WHERE oh.id = @id and oa.risk_rating > 0 and oa .Investor_Name like '%' + @invest + '%' GROUP BY oa.Risk_Rating

于 2012-04-16T16:15:24.747 回答