0
2个数据表,其数据如下所示。SQL - 为特定列或表选择第一个匹配的行列值和任何后续行值为空
Order表:
| OrderId | TotalAmount | TotalTax |
|---------|-------------|----------|
| 1 | 10 | 0.1 |
| 2 | 40 | 0.4 |
| 3 | 20 | 0.2 |
项目表:(FK的OrderId)
| OrderId | ItemId | ItemDesc |
|---------|--------|----------|
| 1 | 1 | Item1 |
| 1 | 2 | Item2 |
| 2 | 1 | Item1 |
| 2 | 3 | Item3 |
| 2 | 5 | Item5 |
| 3 | 7 | Item7 |
| 3 | 5 | Item5 |
预计输出-Records加入两个表应该有值,在第一行和随后匹配的行匹配的记录后应对于来自订单表的列有空。如下图所示
| OrderId | TotalAmount | TotalTax |ItemId | ItemDesc |
|---------|-------------|----------|-------|----------|
| 1 | 10 | 0.1 | 1 | Item1 |
| 1 | NULL | NULL | 2 | Item2 |
| 2 | 40 | 0.4 | 1 | Item1 |
| 2 | NULL | NULL | 3 | Item3 |
| 2 | NULL | Null | 5 | Item5 |
| 3 | 20 | 0.2 | 7 | Item7 |
| 3 | NULL | NULL | 5 | Item5 |
查询:
DECLARE @order table(orderId int, TotalAmount int, totaltax decimal)
Insert into @order(orderId, TotalAmount,totaltax)
values
(1,10,0.1),
(2,40,0.4),
(3,20, 0.2)
DECLARE @ITEMS table(OrderId int, ItemId int, ItemDesc nvarchar(50))
Insert into @ITEMS(OrderId, ItemId,ItemDesc)
values
(1,1,'Test1'),
(1,2,'Test2'),
(2,1,'Test1'),
(2,3,'Test3'),
(2,5,'Test5'),
(3,7,'Test7'),
(3,5,'Test5')
select o.*,i.* from @order o
inner join @ITEMS I
on o.orderId = i.orderId
旁白:这看起来像显示格式化数据,东西一般都比较好处理在应用程序中而不是在t中他数据库。 – HABO
我明白这一点。但这是一个需要这种数据的特定实例。 – Rex