如何组合两个SQL查询,并在输出中唯一地标记每个查询?
我试图确定两个不同群体(“千禧一代”)和所有其他群体(“非千禧一代”)之间的销售差异百分比。我可以通过以下SQL查询获得每个组的总销售额:如何组合两个SQL查询,并在输出中唯一地标记每个查询?,sql,sql-server,Sql,Sql Server,我试图确定两个不同群体(“千禧一代”)和所有其他群体(“非千禧一代”)之间的销售差异百分比。我可以通过以下SQL查询获得每个组的总销售额: SELECT SUM(f.Quantity * f.Unit_Price) AS 'Millenial Total Sales' FROM Date_Dimension d, Order_Fact f, Item_Dimension i, Customer_Dimension c WHERE i.Item_key = f.Item_key AND c.DOB
SELECT SUM(f.Quantity * f.Unit_Price) AS 'Millenial Total Sales'
FROM Date_Dimension d, Order_Fact f, Item_Dimension i, Customer_Dimension c
WHERE i.Item_key = f.Item_key
AND c.DOB BETWEEN '1984-01-01' and '2000-12-25'
SELECT SUM(f.Quantity * f.Unit_Price) AS 'Non-Millenial Total Sales'
FROM Date_Dimension d, Order_Fact f, Item_Dimension i, Customer_Dimension c
WHERE i.Item_key = f.Item_key
AND c.DOB NOT BETWEEN '1984-01-01' and '2000-12-25'
我也使用了UNION,但每次尝试时都会出现错误:
SELECT SUM(f.Quantity * f.Unit_Price) AS 'Total Sales'
FROM Date_Dimension d, Order_Fact f, Item_Dimension i, Customer_Dimension c
WHERE i.Item_key = f.Item_key
AND c.DOB BETWEEN '1984-01-01' and '2000-12-25'
UNION
SELECT SUM(f.Quantity * f.Unit_Price) AS 'Total Sales'
FROM Date_Dimension d, Order_Fact f, Item_Dimension i, Customer_Dimension c
WHERE i.Item_key = f.Item_key
AND c.DOB NOT BETWEEN '1984-01-01' and '2000-12-25'
简而言之,我如何比较“千禧一代”和“非千禧一代”这两个群体,并显示千禧一代的销售额百分比?您可以使用
案例
仅对千禧一代进行汇总:
SELECT *
, 100 * [Millennial Sales] / [Total Sales] as PercentageMillennialSales
FROM (
SELECT SUM(CASE WHEN c.DOB BETWEEN '1984-01-01' and '2000-12-25'
THEN f.Quantity * f.Unit_Price END) AS [Millennial Sales]
, SUM(f.Quantity * f.Unit_Price) AS [Total Sales]
FROM Date_Dimension d
JOIN Order_Fact f
ON ???
JOIN Item_Dimension i
ON ???
JOIN Customer_Dimension c
ON ???
) sub
不确定您的表是如何连接在一起的。如果您没有做到这一点,那么生成的数字将毫无意义。我不知道您将c表链接到其他表的位置。事实上,我认为您只是在进行交叉连接,这意味着您每次都在有效地查询所有订单事实记录,因为没有过滤器在c和f之间建立连接,唯一真正的过滤是在c上 因此,我刚刚创建了一个连接,我猜其中一个是合适的。您需要修改此连接以适合您的表,但类似于以下内容的内容应该可以工作:
SELECT Millenials.TotalM AS MillenialTotal, NonMillenials.TotalM AS NonMillenialTotal, (Millenials.TotalM/(Millenials.TotalM+NonMillenials.TotalM)) AS MillenialPercent
FROM (SELECT
SUM(f.Quantity * f.Unit_Price) AS Total
FROM Order_Fact f
INNER JOIN Item_Dimension i ON i.Item_key = f.Item_key
INNER JOIN Customer_Dimension c ON i.Customer_key = c.Customer_key
WHERE c.DOB BETWEEN '1984-01-01' and '2000-12-25') AS Millenials
CROSS JOIN (SELECT
SUM(f.Quantity * f.Unit_Price) AS Total
FROM Order_Fact f
INNER JOIN Item_Dimension i ON i.Item_key = f.Item_key
INNER JOIN Customer_Dimension c ON i.Customer_key = c.Customer_key
WHERE c.DOB NOT BETWEEN '1984-01-01' and '2000-12-25') AS NonMillenials