通过重复第一行中第二行到每一行的行来从2个表中进行选择

时间:2015-01-13 11:06:17

标签: sql-server sql

我有一种情况,我想以这种方式简化它。 (我在Sql Server中写这个)

想象一下,我有两张表如下:

图书

+ --------- +
| BookID |
+ --------- +
| 1 |
+ --------- +
| 2 |
+ --------- +
| 3 |
+ --------- +

BookRentals

+ --------- + ------------- + --------------- +
| BookID | RentedBy | RentalDate |
+ --------- + ------------- + --------------- +
| 1 | A | 1/1/2015 |
+ --------- + ------------- + --------------- +
| 2 | A | 2015年2月1日|
+ --------- + ------------- + --------------- +
| 1 | C | 2015年3月1日|
+ --------- + ------------- + --------------- +
| 3 | C | 2015年4月1日|
+ --------- + ------------- + --------------- +

我需要编写一个产生以下结果的select语句:

+ --------- + ------------- + --------------- +
| BookID | RentedBy | RentalDate |
+ --------- + ------------- + --------------- +
| 1 | A | 1/1/2015 |
+ --------- + ------------- + --------------- +
| 2 | A | 2015年2月1日|
+ --------- + ------------- + --------------- +
| 3 | A | NULL |
+ --------- + ------------- + --------------- +
| 1 | C | 2015年2月1日|
+ --------- + ------------- + --------------- +
| 2 | C | NULL |
+ --------- + ------------- + --------------- +
| 3 | C | 2015年2月1日|
+ --------- + ------------- + --------------- +

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

所以你想要所有书籍和所有租户的交叉连接,添加一个列,显示给定的BookID和Renter组合的RentalDate(如果有的话)?

试试这个:

SELECT B.BookId, R.RentedBy, BR.RentalDate
FROM Books AS B
CROSS JOIN (SELECT DISTINCT RentedBy FROM BookRentals) AS R
LEFT JOIN BookRentals AS BR ON BR.BookId = B.BookId AND BR.RentedBy = R.RentedBy

如果您已经有一个包含所有租用者ID的表,您可能希望使用该表而不是子查询(SELECT DISTINCT RentedBy FROM BookRentals)