2012-04-12 50 views
0

我有2个表...他们基本上是相同的,除了列名之一,因为他们处理2个不同的名称,虽然..我想要的数据位于具有相同名称的列中。几乎我想做的事......是的,他们也需要有所区别,所以我不计算重复...我可以把它们作为单独的表......但我不能把它们放在一起..我需要他们在1列,因为它是如何被发送到C3代码页以及它如何读取它...结构已经被预先设置...并且在这个存储过程中有大约5个其他语句正在执行,像这样(我也不是那个设置这个的人)。所以,如果这是可能的..请让我知道..我也会贴上我的确切代码,如果你想看到真实的生活代码..我只是试图简化它,使其更容易理解。 我要发布一些图片,希望能够更好地解释它。检查2个sql列,并显示结果在1列pt2

图片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表..他们是非常相同的列明智......但我想结果在一起..我已经尝试了几种方法..但我似乎无法得到它 图像2-底部的表更是我正在寻找..它结合了他们俩到1:

http://imgur.com/a4qXW

如果订单有发现或机构或两者都在..然后它被标记为1的风险评级...如果它不..然后0该风险评级..然后总结他们所有看到我得到..任何帮助表示赞赏..如果你不明白,我会澄清我的所能。

编辑:
我一直在使用它.. .did这http://pastebin.com/117Z2TVh ..得到它显示2列..但仍然没有正确的结果......我越来越A1 = 1 ... a2 = 1 ...所以它没有通过所有的命令......或者它需要一种方法来计算它...我在case case语句的开始处加上了一笔数字......因为计数的错误......所以我把计数出...没有真正的工作..任何建议?

回答

0

; WITH发现AS(选择oa.id,oa.Risk_Rating,COUNT(orf.Prnt_ID)findingcount FROM orderaudits OA LEFT JOIN orderfindings ORF 上oa.ID = orf.Prnt_ID --where oa.risk_rating > 0和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 o on oa.ID = ora.Prnt_ID --WHERE oa。risk_rating> 0和oa.Investor_Name like'%'+ @invest +'%' GROUP BY oa.id,oa.Risk_Rating) /* SELECT'Finding Only',oa.Risk_Rating,COUNT(oa.id)as一个,SUM(CASE WHEN f.findingcount> 0,则1 ELSE 0 END)为b FROM orderaudits OA 左连接找到˚F ON oa.id = f.id LEFT JOIN orderheader ON oh.id = OA哦。 orderheader_id WHERE oh.id = @id和oa.risk_rating> 0且oa.Investor_Name LIKE '%' + @invest + '%' GROUP BY oa.Risk_Rating

UNION ALL

SELECT '机构只有',oa.Risk_Rating,COUNT(oa.id),其为,SUM(CASE WHEN a.agencycount> 0,则1 ELSE 0 END)为b FROM orderaudits OA LEFT JOIN局一个 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' +转换(nvarchar的,oa.risk_rating)如猫,SUM(CASE WHEN f.findingcount> 0 OR a.agencycount> 0,则1 ELSE 0 END)as b FROM orderaudits OA LEFT JOIN发现˚F ON oa.id = f.id LEFT JOIN局一 ON oa.id = a.id LEFT JOIN orderheader哦 ON oh.id = oa.orderheader_id WHERE oh.id = @ id和oa.risk_rating> 0和oa.Investor_Name like'%'+ @invest +'%' GROUP BY oa.Risk_Rating

1

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

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

基本上你写两个查询的UNION两侧返回两列的一个问题,他们正在返回的最终结果集的一列。如果列名不相同,则可以将它们合并到最终的联合结果集中。

+0

我实际上已经尝试过union..the sql语句,我放入..copied它..改变它的机构..并坚持一个工会所有介于..它不结合他们虽然..它给我.. a1 = 5,a2 = 2,a2 = 3 a2 = 3 ...这仍然是错误的.. .. .cuz在现实..a1应该是5,和a2 4 ...我不想要添加他们..或者他们单独做..我需要语句来检查,看看他们中的任何一个是否是真的..如果是。 .add 1..elso..nothing ..并通过所有的命令..有帮助吗? – 2012-04-12 19:44:53

+0

你可以编写出你的表格和数据,如果我有你的确切环境来编写查询,比试图想象它在我的脑海里会更快:) – 2012-04-12 19:50:10

+0

tbh ..不是真的..有一些敏感信息这张桌子是从哪里拉出来的......这就是为什么我把一张虚拟桌子放在桌子上......不是桌子......但是......信息......我试图想办法去做到这一点..我可以做到。 .is扩展虚拟布局为你,使表应该是他们应该 – 2012-04-12 20:06:37