我试过搜索,但可能缺少找到类似帖子的语言,所以这是我的基本问题
(SQL Server 2016
)...
我有一个标识唯一客户遭遇的查询(1 line per 1 transaction
)。然后我试图将客户从另一张桌子上买的物品拉进去。如果他们购买了多个商品,则加入表会多次使用名为" Line"的字段列出该交易。表示这些项目的排名。
表2:
Transaction--Line--Item
1000--1--Staples
1000--2--Stapler
1001--1--Paper
我希望我的查询中的最终结果是: 表1:
Customer--Transaction--Item1--Item2
John Doe--1000--Staples--Stapler
Jane Smith--1001--Paper--NULL
我目前正在尝试使用CASE
中的SELECT
语句执行此操作:
SELECT Table1.Customer,
Table1.Transaction,
CASE WHEN Table2.LINE = 1 THEN Table2.Item
ELSE NULL
END as Item1
CASE WHEN Table2.LINE = 2 THEN Table2.Item
ELSE NULL
END as Item2
FROM Table1 left outer join Table2 on Table1.transaction=Table2.transaction
这会产生正确的结果,除了一对多连接将这些连接放在重复的行
上John Doe--1000--Staples--NULL
John Doe--1000--NULL--Stapler
Jane Smith--10001--Paper--NULL
我想要John Doe
一行。除了在初始查询后运行两个单独的更新语句,我不知道如何获得我想要的结果。帮助
(为糟糕的格式道歉)
答案 0 :(得分:0)
下面应该有效。假设至少在表2中输入
SELECT Table1.Customer,
Table1.Transaction,
t1.Item AS Item1,
t2.Item as Item2
FROM Table1
INNER JOIN Table2 t1
on c.transactions=t1.tid
left outer join Table2 t2
on Table1.transaction=t2.transaction AND t2.Line=2
where t1.line=1