2014-06-06 135 views
1

選擇,我想從兩個表中選擇並使用此查詢顯示我的結果:查詢到從兩個不同的表

CREATE TABLE Buy_Table 
(
buy_id int identity primary key, 
user_id int, 
amount decimal (18,2) 
); 
go 
INSERT INTO Buy_Table 
(user_id, amount) 
VALUES 
('1', 10), 
('1', 8), 
('1', 20), 
('3', 1), 
('2', 2); 
go 
CREATE TABLE Sell_Table 
(
sell_id int identity primary key, 
user_id int, 
amount decimal (18,2) 
); 
go 
INSERT INTO Sell_Table 
(user_id, amount) 
VALUES 
('1', 10), 
('1', 8), 
('1', 20), 
('3', 3), 
('2', 3); 
go 

select 
[user_id], 
'Buy' as [Type], 
buy_id as [ID], 
amount 

from Buy_Table 

union all 

select 
[user_id], 
'Sell', 
sell_id, 
amount 
from Sell_Table 

order by 
[user_id], 
[ID], 
[Type] 

但是上面的查詢將返回USER_ID的每一行這樣

enter image description here

我想顯示我的結果在網格中是這樣的:

enter image description here

這可以在查詢本身完成,而不是操縱網格? Thx

回答

2

這太長了評論。

是的,它可以在查詢中完成。不,你不想這樣做。 SQL查詢的結果集通常被認爲是表。它們可以用於查詢;他們有行和列。

做你想做的事違反了一些關係數據庫中的「table-ness」原則。最重要的是行的順序現在很重要。在關係數據庫中,表格表示無序集合。如果沒有排序,則不知道第二行和後續行所屬的位置。不得不從另一行「借閱」信息似乎是一種不好的做法,因爲它是。另一個問題是,現在第一列有一個含糊不清的含義,具體取決於一行是否有值。

因此,這最好在應用層完成,因爲目的是 - 大概 - 滿足一些所需的輸出標準。它一個有趣的練習,以獲得SQL中的這種格式,雖然最好的方式來做它因數據庫而異。這就是說,做一個有趣的練習並不是一個好主意。