Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何组合两个SQL查询,并在输出中唯一地标记每个查询?_Sql_Sql Server - Fatal编程技术网

如何组合两个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

我试图确定两个不同群体(“千禧一代”)和所有其他群体(“非千禧一代”)之间的销售差异百分比。我可以通过以下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 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