2016-09-06 38 views
0

我有一個有趣的問題。我有兩個T-SQL STUFF聲明。在這個例子中,我使用了union。這將以兩行顯示結果。結合SQL Server Stuff語句獲取單行

我想要做的是將這些結果合併,以便它返回一行。我正在使用SQL Server 2008 R2。該解決方案應該能夠複製任何東西語句返回null。

有沒有辦法做到這一點?

下面是代碼

SELECT 
    (SELECT 
     STUFF((SELECT (' ' + mod_orders.mod_no + '<br>') 
       FROM mod_serials 
       INNER JOIN mod_orders ON mod_serials.mod_id = mod_orders.mod_id 
       INNER JOIN mod_order_items ON mod_orders.mod_id = mod_order_items.mod_id AND mod_order_items.item_id = 170 
       WHERE  
        (mod_serials.serial_id = 62 AND 
        mod_serials.date_implemented IS NOT NULL) 
       ORDER BY mod_serials.serial_id 
       FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '')) 
UNION 

SELECT 
    (SELECT  
     STUFF((SELECT (' ' + char_data_mv.char_value + '<br>') 
       FROM char_data_mv 
       WHERE (char_data_mv.object_id = 62 AND char_data_mv.char_id = 177) 
       ORDER BY char_data_mv.row_id 
       FOR XML PATH(''), TYPE).value('.','nvarchar(max)'), 1, 1, '')) as [Impl] 

實施例的數據:

Row1 - 00001<br> 00005<br> 
Row2 - PMB 12345<br> 

組合的結果將是:

00001<br> 00005<br> PMB 12345<br> 
+0

你得到的2行看起來像什麼?你想要的第一行是什麼樣的? – BeanFrog

+0

另外 - 你的意思是「解決方案應該能夠複製任何東西聲明返回null」?恐怕我不明白這是什麼意思。 – BeanFrog

+0

請編輯您的答案,而不是發佈更多評論。 – BeanFrog

回答

0

UNION語句返回所有行的從第一個表,然後把第二張桌子上的所有行放在一張大桌子裏 - 這就是我爲什麼你會得到2排。

取而代之,您可以將「+」運算符與2個字符串一起添加。如果另一個爲空,您還想返回一個字符串,並且添加空值會導致空值。因此,使用ISNULL函數來給出一個空字符串。

SELECT 
ISNULL((SELECT  STUFF 
((SELECT  
(' ' + mod_orders.mod_no + '<br>') 
FROM   mod_serials 
INNER JOIN mod_orders ON mod_serials.mod_id = mod_orders.mod_id 
INNER JOIN mod_order_items ON mod_orders.mod_id = mod_order_items.mod_id AND mod_order_items.item_id = 170 
WHERE  (mod_serials.serial_id = 62 AND mod_serials.date_implemented IS NOT NULL) 
ORDER BY mod_serials.serial_id FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '')),'') 
+ 
ISNULL((SELECT  STUFF 
((SELECT  
(' ' + char_data_mv.char_value + '<br>') 
FROM   char_data_mv 
WHERE  (char_data_mv.object_id = 62 AND char_data_mv.char_id = 177) 
ORDER BY char_data_mv.row_id FOR XML PATH(''), TYPE).value('.','nvarchar(max)'), 1, 1, '')),'') as [Impl] 

請注意,您需要刪除博特的UNION,也是第一個SELECT之後 - 這是創建第二個表。

+0

很好的答案,從來沒有想過會這麼簡單。謝謝你的幫助 – Andyww