查询从两个不同的表中进行选择

时间:2014-06-06 03:15:05

标签: sql

我想从两个表中选择并使用此查询显示我的结果:

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

1 个答案:

答案 0 :(得分:2)

评论太长了。

是的,可以在查询中完成。不,你不想这样做。 SQL查询的结果集通常被认为是表。它们可用于查询;他们有行和列。

执行您想要做的事情违反了关系数据库中“table-ness”的一些原则。最重要的是行的顺序现在很重要。在关系数据库中,表表示无序集。如果没有排序,您就不知道第二行和后续行的所在位置。不得不从另一行“借用”信息似乎是一种不好的做法,因为它是。另一个问题是第一列现在有一个含糊不清的含义,具体取决于行是否有值。

因此,最好在应用程序层中完成,因为其目的是 - 可能 - 满足某些所需的输出标准。 在SQL中获取此格式的有趣练习,尽管最好的方法因数据库而异。也就是说,做一个有趣的练习并不能让这个好主意。