0

运行 SQL Server 2008 R2。

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

我们的旧 DBA 设置了一张公司表 (Company),然后根据数据库的位置更改了一个字段 (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

4 回答 4

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

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

于 2013-03-27T21:37:49.020 回答
0

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

select * from companyTable1
union
select * from companyTable2
于 2013-03-27T21:38:04.123 回答
0

如果我没看错,您想根据表中匹配的值使用不同IsPrimary = 1dbo.Company表。您也许可以使用CASE 语句,但我认为它不会起作用。我认为您被 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 是可选的。所以,在这个例子中,他们可以被排除在外。

于 2013-03-27T21:59:18.373 回答
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
于 2013-03-27T22:57:30.450 回答