加入sql server中的同一个表

时间:2015-08-07 10:40:23

标签: sql sql-server

我有一张表product,数据如下所示。

id     type     account_id    start_date    end_date
1      APPLE    100           2015-01-27    2015-02-25
2      MANGO    100           2015-01-25    2015-02-25
3      GRAPES   100           2015-02-25    2015-04-25
4      MANGO    100           2015-02-25    2015-04-25
5      APPLE    101           2015-03-25    2015-04-25
6      MANGO    101           2015-03-25    2015-04-25

我想在此处实现的是根据MANGO过滤掉account_id类型的所有记录,并根据end_date添加与同一帐户关联的其他类型。

结果应如下所示。

id     type     account_id    start_date    end_date     other_types
2      MANGO    100           2015-01-25    2015-02-25   APPLE
4      MANGO    100           2015-02-25    2015-04-25   GRAPES
6      MANGO    101           2015-03-25    2015-04-25   APPLE

我在MySQL上尝试了以下查询,但它可以工作,但无法让它在SQL服务器上运行。任何帮助都会很棒。上面的结果就是我需要在SQL服务器中实现的所有内容。

SELECT yt1.`id`, yt1.`type`, yt1.`account_id`, yt1.`start_date`, yt1.`end_date`, yt2.`type` AS other_types
FROM `product` yt1, `product` yt2
WHERE 
yt1.`account_id` = yt2.`account_id` AND
yt1.`type` = 'MANGO' AND
yt1.`end_date` = yt2.`end_date`
GROUP BY yt1.`id`

1 个答案:

答案 0 :(得分:3)

这是SQL Server中的等效查询:

SELECT yt1.id, yt1.type, yt1.account_id, yt1.start_date, yt1.end_date,
       yt2.type AS other_types
FROM product yt1 JOIN
     product yt2
     ON yt1.account_id = yt2.account_id AND
        yt1.end_date = yt2.end_date
WHERE yt1.type = 'MANGO' AND yt2.type <> 'MANGO';

你的MySQL查询并没有真正起作用。它正在为其他类型选择一个任意值,这样你的样本数据就不会出现在&#34; Mango&#34;。

实际上,这适用于两个数据库。