0

SQL Server 2008 R2 を実行しています。

社内プログラムがどの場所/会社から実行されているかを知ることができるように、基本的なフィルターを作成しようとしています。

古い DBA は会社テーブル (Company) をセットアップし、データベースの場所に基づいて (dbo.Company.isPrimary) 1 つのフィールドを変更します。場所がプライマリの場合、そのフィールドは「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)

これをビューにラップして、どこでもビューを使用することをお勧めします。次に、会社のデータを異なるテーブルのテーブルに分割するという厄介な問題を解決する方法を考え始めることができます。

これは、テーブルに重複する情報があることを前提としています。与えられた は 1 つのテーブルにしか表示されないため、おそらくIsPrimary値は必要ありません。nameその場合は、結合を使用してください。

select *
from Company1Table
union all
select *
from Company2Table

そして、それらを 1 つのテーブルに結合する方法に取り組み始めます。

于 2013-03-27T21:37:49.020 に答える
0

私には理解が難しいですが、あなたが望むのはUNIONだと思います。

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

IsPrimary = 1質問を正しく読んでいる場合、テーブルで一致する値に基づいて異なるテーブルを使用する必要がありdbo.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

注: 1 行しかない場合、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 に答える