0

特定の問題があります。データベースからいくつかのデータを取得する必要があります。プログラムからデータを取得するメカニズムがあります。私はそれを使用する必要があります。変更はできません。元のクエリは次のとおりです。

SELECT it_Symbol AS Symbol, tt_Name AS Nazwa, tt_Price AS Cena, 
       tt_Quantity AS Ilosc, tt_Id
FROM  tr__Transaction INNER JOIN  tr_Item 
                      ON tt_TransId=tr_Id LEFT OUTER JOIN  it__Item 
                      ON tt_ItemId = it_Id RIGHT JOIN  reg_Site 
                      ON tr_SiteId = rs_Id LEFT OUTER JOIN  it_ItemSite 
                      ON it_Id = is_ItemId
WHERE tt_TransId=@transId 
GROUP BY tt_Id, tt_Quantity, tr_Id, it_Name, tt_Price,it_Symbol, 
         is_Name, tt_Name, tt_ItemId, tt_Id

問題はI need to get some additional data from tr__Transaction table. 、フィールドがあることtr_Sourceです。このフィールド値が必要ですが、返されたフィールドにリストされtr__transactionているレコードが必要です。tr_Idtt_Id

tt_Id 列の値に依存する値を返すサブクエリを実行する方法はありますか? それとも、他の結合の組み合わせですか?私はこれに丸一週間費やしましたが、これを行うためのアイデアやスキルはもうありません:/どんな助けでも大歓迎です。

4

2 に答える 2

0

あなたの質問を正しく理解しているかどうかわかりませんが、元の SQL ステートメントは変更できない (つまり、読み取り専用のビューにある) と言っていると仮定します。次に、別の SELECT ステートメントをラップできます。

SELECT  tblOriginal.*, tblExtend.tt_Source
FROM    (
        SELECT it_Symbol AS Symbol, tt_Name AS Nazwa, tt_Price AS Cena, 
               tt_Quantity AS Ilosc, tt_Id
        FROM  tr__Transaction INNER JOIN  tr_Item 
                              ON tt_TransId=tr_Id LEFT OUTER JOIN  it__Item 
                              ON tt_ItemId = it_Id RIGHT JOIN  reg_Site 
                              ON tr_SiteId = rs_Id LEFT OUTER JOIN  it_ItemSite 
                              ON it_Id = is_ItemId
        WHERE tt_TransId=@transId 
        GROUP BY tt_Id, tt_Quantity, tr_Id, it_Name, tt_Price,it_Symbol, 
                 is_Name, tt_Name, tt_ItemId, tt_Id
        ) AS tblOriginal
        INNER JOIN tr__Transaction AS tblExtend
        ON tblOriginal.tt_Id = tblExtend.tt_Id

しかし、あなたの問題はそれよりも複雑であると思います.1週間以上費やしていると思います. その場合、詳しく教えていただけますか?

于 2012-12-14T14:05:40.830 に答える
0

何が必要なのかまだ正確にはわかりませんが、質問を整理する試みです。コメントでコードをフォーマットすることはできないため、これは回答の実用的なバージョンです。

一部の関係が間違っている場合は説明してください。

テーブルが異なるエイリアスを持っている限り、異なる条件下でいつでも複数回テーブルを結合できます。

例えば:

SELECT c.it_Symbol AS Symbol, a.tt_Name AS Nazwa, a.tt_Price AS Cena, 
       a.tt_Quantity AS Ilosc, a.tt_Id, f.tr_Source 
FROM  tr__Transaction a 
    INNER JOIN  tr_Item b
                      ON a.tt_TransId=b.tr_Id 
    LEFT OUTER JOIN  it__Item c
                      ON a.tt_ItemId = c.it_Id 
    RIGHT JOIN  reg_Site d
                      ON a.tr_SiteId = d.rs_Id 
   LEFT OUTER JOIN  it_ItemSite e
                      ON c.it_Id = e.is_ItemId
   LEFT OUTER JOIN tr__Transaction f
                      ON c.tt_id = f.tr_id
WHERE a.tt_TransId=@transId 
GROUP BY a.tt_Id, a.tt_Quantity, a.tr_Id, c.it_Name, a.tt_Price,c.it_Symbol, 
         e.is_Name, a.tt_Name, a.tt_ItemId, a.tt_Id
于 2012-12-14T13:56:03.883 に答える