2013-10-07 163 views
0

我試圖讓多個選擇語句背後的推理尾巴彼此。換句話說,重點是什麼?注意:我對T-SQL非常熟悉......我已經從SQL Server的維護方面轉移到了它的開發方面。 下面是混淆了我的代碼(部分):在選擇內選擇一個選擇內選擇

SELECT DISTINCT id 
,NAME 
,TypeCode 
,ProductId 
,ProductName 
,LocationCode 
,County 
,STATE 
,RecommendationType 
,PackageName 
FROM (
SELECT c.Id 
    ,C.NAME 
    ,p.Typecode 
    ,p.ProductId 
    ,p.Productname 
    ,p.LocationCode 
    ,p.County 
    ,p.STATE 
    ,'Appened' AS RecommendationType 
    ,PackageName 
FROM (
    SELECT op.* 
     ,t.i.value('@ProductId', 'varchar(50)') AS productId 
     ,t.i.value('@Name', 'varchar(50)') AS Product 
    FROM (
     SELECT pg.CustomerId 
      ,pg.NAME AS PackageName 
      ,pg.runtimedefinition.query('/PackageDefinition/Products')         AS CList 
     FROM product.package pg WITH (NOLOCK) 
     ) op 
    CROSS APPLY clist.nodes('Products/Task[@xsi:type="ProductTask"]') t(i) 
    ) m 

記住...這個代碼部分。

謝謝!

回答

0

那麼第二個似乎有點沒有意義,因爲它只增加了一個由字面填充的列,但除此之外。

在以前的化身中,它可能做得更多,重新考慮被認爲是太多努力,或者可能遭受開發人員遺忘。 「我以爲我已經做到了」 管理器中斷,修復另一個代碼並忘記你沒有完成這一個。

至於這種技術,它是提出解決方案的好方法。我把它叫出來,雖然可能有一個科學名稱。

經過所有的努力放在交叉應用與XML並獲得它的工作,它更容易使用結果和螺栓附加行爲通過包裝它作爲內部查詢。

它比臨時表和可能開發的預CTE或由開發人員不太舒服的噪聲較小。

嘗試並寫入一個oner,你可能會開始看到一兩點。 :)