2012-04-17 9 views
0

[解決しよう:私は(私も第4テーブル/ビューを必要と判明)この作業クエリを作成するようになったおかげでbluefeetとBrianする]」SQLクエリは、レコードテーブルAのParentID表Bに基づいて取得

SELECT  A.SalesLineID, A.ArticleResultID, B.ID, C.ID, D.Value 
FROM   VIEWA AS A 
       INNER JOIN TABLEB AS B ON A.ArticleResultID = B.ArticleResultID 
       AND B.Name = N'Collect' AND DAPR.Value = 1 
       INNER JOIN TABLEC AS C ON B.ArticleResultID = C.ID 
       AND C.Name='Assemble' 
       AND C.Value = 1 
       INNER JOIN TABLED AS D ON D.ArticleResultID = C.ParentId 
       AND D.Name = 'IndexY' 
WHERE  (A.SalesID = @SalesID) 

[更新:IndexY/ColorとProdIdを仮定して間違いをしました。ここで、フィールドAは、ID-NAME-VALUE-ARTICLERESULTID-PRODIDの5列のみのパラメータ/プロパティテーブルです。IndexYはNameフィールドの値です。 。]

このトリックを行うには、正しいSQLクエリを作成するのに問題があります。

Iは、以下の2つのテーブルを有する:

Table A 
ID Name   Value ArticleResultID  ProdID Color 
1 Operation Collect    110   10 BLACK 
2 IndexY   10    110   10 - 
3 Operation Collect    101   11 WHITE 


Table B 
ID ParentID Name  Value  
101 110  Assemble  1  
101 100  Assemble  0  

ステップ:上記のシナリオのthats ORG_A.ArticleResultID = 11で

Find record in A with Name = Operation and Value = Collect and ProdId = 11 AS ORG_A 
Find record in B With B.ID = ORG_A.ArticleResultId AND B.NAME = 'Assemble'AND B.VALUE = 1 AS B 
Find record in A With A.ArticleResultID = B.ParentID as NEW_A 

- > B.ParentID = 110 - > NEW_A.ARTICLERESULTID = 110 - >(IndexY - バリュー - 10)誰かがどのようにこのクエリを構築するために私に言うことができる場合に感謝

..

敬具、

マイク・D

[OLD説明:]

私はトラブルこのトリックを成し遂げるする権利SQLクエリを構築することだ:

私は、次の2つのテーブルを持っている:

Table A 
Name  Value ArticleResultID  IndexY  Color ProdID 
Operation Collect    110   10   -  0 
Operation Collect    101   _  Black  100 


Table B 
ID ParentID Name  Value Dx  Dy 
101 110  Assemble  1  1000 500 
101 100  Assemble  0  400  300 

NAMEが '操作'、VALUEが '収集'、PRODID = '100'のすべてのレコードをAからフェッチしたいのですが、PARENTIDを含むテーブルAのレコードのIndexY値も表B wh上記のシナリオでは、ArticleResultID 110がIndexY(10)である表Aのレコードを与えるParentID 110がありますが、これは、テーブルBID = A.ArgicleResultID AND Name ='ArgicleResultID AND Name = 。誰かがどのようにこのクエリを構築するために私に言うことができるかどう

多く..

敬具、

マイク・Dい

答えて

2

要件が最も明瞭ではないためです。これはどう:

SELECT a2.* 
FROM ta a1 
INNER JOIN tb b 
    ON a1.articleresultid = b.id 
INNER JOIN join ta a2 
    ON b.parentid = a2.articleresultid 
WHERE a1.name = 'Operation' 
    AND a1.prodid = 100 
    AND b.name = 'Assemble' 
    AND b.value = 1 

が第二例えばsqlfiddle参照:あなたはちょうどその110 articleresultidでレコードを、必要な場合

ここ
SELECT a1.*, a2.indexy as additionalIndexY 
FROM ta a1 
INNER JOIN tb b 
    ON a1.articleresultid = b.id 
INNER JOIN ta a2 
    ON b.parentid = a2.articleresultid 
WHERE a1.name = 'Operation' 
    AND a1.prodid = 100 
    AND b.name = 'Assemble' 
    AND b.value = 1 

が作業バージョン

sqlfiddleです

+0

Thnx bluefeetしかし、私は問題を説明する間違いをしました。私のアップデートがもっと鮮明になることを願っています... –

2

あなたのためにこの作品を高く評価?

SELECT a.*,c.IndexY 
    FROM [TableA] a 
    JOIN [TableB] b ON a.ArticleResultId = b.id 
       AND b.Name ='Assemble' 
       AND b.Value = 1 
    JOIN [TableA] c ON b.ParentId = c.ArticleResultID 
    WHERE a.name = 'Operation' 
    AND a.Value = 'Collect' 
    AND a.ProdId = 100