2015-08-07 5 views
1

У меня есть таблица product, и данные приведены ниже.Присоединиться к той же таблице в sql-сервере

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` 
+0

Какой должен быть результат, если есть два других типа, связанных с одним и тем же 'account_id' для того же' end_date'? например, если вы добавляете запись APPLE для '100' и' 2015-04-25' – ughai

ответ

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 был на самом деле не работает. Он выбирал произвольное значение для других типов, которое по вашим данным образца просто не было «Манго».

Фактически, это будет работать в обеих базах данных.

+0

Будьте осторожны с использованием DISTINCT, поскольку это может быть очень медленно - если вы хотите, чтобы строки были уникальными, используйте GROUP BY, это (всегда?) более высокая производительность , –

+0

Но GROUP BY требует aggregate_function в SQL-сервере. Я не уверен, как это определить. – user850234

+0

'и yt2.type! = 'MANGO'' должны помочь отфильтровать манго из других типов. [sql fiddle] (http://sqlfiddle.com/#!9/258383/1) – ughai

Смежные вопросы