我想将两个查询合并为垂直,因此通常不使用union参数。
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
出:QUERY1
列名称:|代码|名称|类别|品牌| PrivateDiscount |1.row _____:| ssff3 | adcdd | affcdcddd | assfdd | %6 |
2.row _____:| scf3 | adcdd | affcdcddd | assfdd | %6 |
出:QUERY2
列名称:| PublicDiscount |1.row _____:| %2 |
2.row _____:| %3 |
我想要这个结果:
列名称:|代码|名称|类别|品牌| PrivateDiscount | PublicDiscount |1.row _____:| ssff3 | adcdd | affcdcddd | assfdd | %6 | ________ | %2 |
2.row _____:| scf3f | adcdd | affcdcddd | assfdd | %6 | ________ | %3 |
因此,应该是列" PublicDiscount",在列" PrivateDiscount"旁边。 怎么可以呢?
答案 0 :(得分:1)
只需加入折扣表两次:
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 :(得分:0)
加入这样的查询:
[请注意,我使用ProductId
作为主键,请将其替换为Products
table]的实际主键字段名称
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;
希望这会有效,谢谢。
答案 2 :(得分:0)
我不太确定,但在我看来,你想在最终结果集中获得与公共折扣一样多的行。这将是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