带有子查询和变量passthrough的SQL Server案例

时间:2013-03-27 21:30:15

标签: sql sql-server sql-server-2008-r2

运行SQL Server 2008 R2。

我正在尝试制作一个基本的过滤器,以便内部程序可以告诉它正在运行的位置/公司。

我们的旧DBA设置公司表(公司),然后在数据库的位置上有一个基于字段更改(dbo.Company.isPrimary)。如果该位置是主要的,那么该字段将具有'1',如果不是则那么它将具有'0'

SELECT *
      WHEN (SELECT Comp.NAME AS @Name FROM dbo.Company comp WHERE comp.IsPrimary =1 )    @Name like '%Company1%' 
    THEN (SELECT * FROM Company1Table WHERE Records =blah)
Else
WHEN (SELECT Comp.NAME FROM dbo.Company comp WHERE comp.IsPrimary =1 ) @Name like '%Company2%'  
    THEN (SELECT * FROM Company2Table WHERE Records =blah)
END

这是我的基本起点。我试图在整个公司保持标准化。我很可能最终会使用这个起点来调用其他存储过程/报告,并传递变量/值。所以我试图做一些非常小而基本的东西,但我失败了。

我希望我的帖子有道理。

4 个答案:

答案 0 :(得分:0)

这是一种相当奇怪的数据格式。假设公司表中有一个名称字段,以下查询将获取您想要的公司信息:

select *
from Company1Table ct
where ct.name in (select name from Company c where c.IsPrimary = 1)
union all
select *
from Company2Table ct
where ct.name in (select name from Company c where c.IsPrimary = 0)

我建议你将它包装在一个视图中并使用视图,好吧,无处不在。然后你就可以开始弄清楚如何解决在不同表中的表之间拆分公司数据的尴尬。

这假设表格有过多的信息。也许IsPrimary值甚至不是必需的,因为给定的name只出现在一个表中。在这种情况下,只需使用连接:

select *
from Company1Table
union all
select *
from Company2Table

然后开始研究如何将它们组合成一个表。

答案 1 :(得分:0)

对我来说很难理解 - 但我认为你可能想要的是一个联盟。

select * from companyTable1
union
select * from companyTable2

答案 2 :(得分:0)

如果我正确阅读问题,您希望根据IsPrimary = 1表中与dbo.Company匹配的值使用不同的表格。您可能可以使用CASE statement,但我认为它不会起作用。我认为你被IF / ELSE困住了。

IF (SELECT Comp.NAME FROM dbo.Company comp WHERE comp.IsPrimary =1 ) like '%Company1%'
BEGIN
    SELECT * FROM Company1Table WHERE Records =blah
END
ELSE
BEGIN
    IF (SELECT Comp.NAME FROM dbo.Company comp WHERE comp.IsPrimary =1 ) like '%Company2%'
    BEGIN
        SELECT * FROM Company1Table WHERE Records =blah
    END
    --Company3 would be in an ELSE statement here
END

注意:当只有一行时,BEGIN和END是可选的。因此,在这个例子中,它们可能被排除在外。

答案 3 :(得分:0)

我认为这就是你需要的

 If Exists (SELECT 1 FROM dbo.Company comp WHERE comp.IsPrimary = 1 and Comp.NAME like '%Company1%')
Begin
 SELECT * FROM Company1Table WHERE Records =blah
End
ELSE
BEGIN
   If Exists (SELECT 1 FROM dbo.Company comp WHERE comp.IsPrimary = 1 and Comp.NAME like '%Company2%')
    BEGIN
        SELECT * FROM Company2Table WHERE Records =blah
    END
End