Я хочу объединить два запроса как вертикальные, чтобы обычно не использовать параметры объединения.

select 
   Code, Name, Category, SubCategory, p.Brand, Model, Price, Currency,
   Unit, Template, F1, F2,P1, P2, DiscountPercent as PrivateDiscount from 
Products as p 
   left join ProductTemplates as pt on pt.TemplateName=p.Template
   left join Discounts as d 
   on d.Brand = p.Brand and d.Status=1 and d.CustomerID='1198' and d.DiscountType=0 

select DiscountPercent as PublicDiscount 
from Products as p 
   left join ProductTemplates as pt on pt.TemplateName=p.Template
   left join Discounts as d 
   on d.Brand = p.Brand and d.Status=1 and d.DiscountType=1

Out: query1

colum name  | Code  | Name  | Category  | Brand  | PrivateDiscount |
1.row _____ | ssff3 | adcdd | affcdcddd | assfdd | %6              |
2.row _____ | scf3  | adcdd | affcdcddd | assfdd | %6              |

Из: query2

colum name | PublicDiscount |
1.row _____| %2             |
2.row _____| %3             |

Я хочу такой результат:

colum name : | Code  | Name  | Category  | Brand  | PrivateDiscount | PublicDiscount |
1.row _____  | ssff3 | adcdd | affcdcddd | assfdd | %6              | %2 |
2.row _____  | scf3f | adcdd | affcdcddd | assfdd | %6              | %3 |

В результате должна быть колонка «PublicDiscount», рядом с колонкой «PrivateDiscount», как это можно сделать?

2
Ramazan Sağır 17 Фев 2015 в 14:28

3 ответа

Лучший ответ

Просто присоединитесь к таблице Скидки дважды:

select 
  Code, Name, Category, SubCategory, p.Brand, Model, Price, Currency,
  Unit, Template, F1, F2,P1, P2, 
  privd.DiscountPercent as PrivateDiscount,
  pupld.DiscountPercent as PublicDiscount
from Products as p 
left join ProductTemplates as pt on pt.TemplateName=p.Template
left join Discounts as privd on privd.Brand = p.Brand and privd.Status=1 and privd.CustomerID='1198' and privd.DiscountType=0 
left join Discounts as pupld on pupld.Brand = p.Brand and pupld.Status=1 and pupld.DiscountType=1;
1
Thorsten Kettner 17 Фев 2015 в 12:12

Я не совсем уверен, но мне кажется, что вы хотите получить столько строк в окончательном наборе результатов, сколько есть публичных скидок. Это типичное использование CROSS JOIN:

select  Code,
        Name,
        Category,
        SubCategory,
        p.Brand,
        Model,
        Price,
        Currency,
        Unit,
        Template,
        F1,
        F2,
        P1,
        P2,
        DiscountPercent as PrivateDiscount,
        p.PublicDiscount
from    Products as p
left join ProductTemplates as pt
        on pt.TemplateName = p.Template
left join Discounts as d
        on d.Brand = p.Brand
           and d.Status = 1
           and d.CustomerID = '1198'
           and d.DiscountType = 0
cross join (
             select DiscountPercent as PublicDiscount
             from   Products as p
             left join ProductTemplates as pt
                    on pt.TemplateName = p.Template
             left join Discounts as d
                    on d.Brand = p.Brand
                       and d.Status = 1
                       and d.DiscountType = 1
            ) as p
0
Ralph 17 Фев 2015 в 13:15

Присоединяйтесь к таким запросам: [Обратите внимание, что я использовал ProductId в качестве первичного ключа, замените его фактическим именем поля первичного ключа таблицы Products]

SELECT Code, Name, Category, SubCategory, p.Brand, Model, Price, 
Currency, Unit, Template, F1, F2,P1, P2, PrivateDiscount, PublicDiscount
FROM
(
    SELECT Code, Name, Category, SubCategory, p.Brand, Model, Price, Currency,
    Unit, Template, F1, F2,P1, P2, DiscountPercent as PrivateDiscount, p.ProductId from Products as p 
    left join ProductTemplates as pt on pt.TemplateName=p.Template
    left join Discounts as d on d.Brand = p.Brand and d.Status=1 and d.CustomerID='1198' and d.DiscountType=0 
) as tbl1
INNER JOIN 
(
    SELECT DiscountPercent as PublicDiscount, p.ProductId from Products as p 
    left join ProductTemplates as pt on pt.TemplateName=p.Template
    left join Discounts as d on d.Brand = p.Brand and d.Status=1 and d.DiscountType=1
) as tbl2
ON tbl1.ProductId=tbl2.ProductId;

Надеюсь, это сработает, спасибо.

1
BabyDuck 17 Фев 2015 в 11:47