SQL查询。由于环境非常有限。它甚至可能吗?

时间:2012-12-14 13:18:43

标签: sql sql-server-2008 subquery

我有一个特定的问题。我需要从数据库中获取一些数据。我有一种从程序中检索数据的机制。我需要使用它,不可能进行修改。原始查询是:

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_Id的{​​{1}}条记录。

任何方式做一个子查询返回依赖于tt_Id列值的值? 或者也许任何其他联合组合?我花了整整一周的时间,没有更多的想法或技能来做到这一点:/ 任何帮助都将非常感激。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

但是我怀疑你的问题更加复杂,因为你花了一周多的时间。在那种情况下,你能详细说明吗?