运行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
这是我的基本起点。我试图在整个公司保持标准化。我很可能最终会使用这个起点来调用其他存储过程/报告,并传递变量/值。所以我试图做一些非常小而基本的东西,但我失败了。
我希望我的帖子有道理。
答案 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