尽管CASE声明

时间:2017-12-13 17:51:45

标签: sql join duplicates

我试过搜索,但可能缺少找到类似帖子的语言,所以这是我的基本问题 (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一行。除了在初始查询后运行两个单独的更新语句,我不知道如何获得我想要的结果。帮助

(为糟糕的格式道歉)

1 个答案:

答案 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