Mysql 如何组合3个查询?

Mysql 如何组合3个查询?,mysql,sql,Mysql,Sql,我有两个表,我正试图拉的材料特定的记录。因此,我的问题如下 单日查询 逐月 Qtr-Wise 这一切都很好 现在我正在尝试合并所有查询。但无法合并我使用的它们。联盟,加入,但没有运气 最后一次尝试是 SELECT * FROM (SELECT tm.internal_name AS model_number, tm.item_description, tm.mrp, tm.asin, COUNT(product_serial_no) as S_FTD

我有两个表,我正试图拉的材料特定的记录。因此,我的问题如下

单日查询

逐月

Qtr-Wise

这一切都很好

现在我正在尝试合并所有查询。但无法合并我使用的它们。联盟,加入,但没有运气

最后一次尝试是

SELECT *
FROM 
    (SELECT 
        tm.internal_name AS model_number, tm.item_description, tm.mrp, tm.asin,
        COUNT(product_serial_no) as S_FTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND register_product_claim.dt = '2016-08-04'
    GROUP BY tm.asin) as s1  
   Inner Join
    (SELECT 

        COUNT(product_serial_no) as S_MTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND MONTH(register_product_claim.dt) = '08'
    GROUP BY tm.asin) as s2
   Inner Join
    (SELECT 

        COUNT(product_serial_no) as S_QTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND (MONTH(register_product_claim.dt) = '08'
            OR MONTH(register_product_claim.dt) = '07'
            OR MONTH(register_product_claim.dt) = '06')
    GROUP BY tm.asin) as s3
我的预期产出是

model_number | item_description |  mrp | asin | S_FTD | S_MTD | S_QTD

其中S_FTD为一天,S_MTD为每月,S_QTD为季度结果

您可以使用条件聚合来完成,请根据您的代码进行调整:

SELECT t.model_number,t.item_description,t.mrp,t.asin,
       MAX(CASE WHEN t.new_col = 'D' then t.S_TD END) as S_FTD,
       MAX(CASE WHEN t.new_col = 'M' then t.S_TD END) as S_MTD,
       MAX(CASE WHEN t.new_col = 'Q' then t.S_TD END) as S_QTD
FROM (
     SELECT ss.*,'D' as new_col FROM (Daily Query) ss
     UNION ALL
     SELECT ss1.*,'M' FROM (Monthly Query) ss1
     UNION ALL
     SELECT ss2.*,'Q' FROM (Quarter Query) ss2
     ) t
GROUP BY t.model_number,t.item_description,t.mrp,t.asin

注意:您必须将每日查询中的列S_FTD别名为S_TD,才能正常工作。

您可以使用条件聚合进行此操作,请根据您的代码进行调整:

SELECT t.model_number,t.item_description,t.mrp,t.asin,
       MAX(CASE WHEN t.new_col = 'D' then t.S_TD END) as S_FTD,
       MAX(CASE WHEN t.new_col = 'M' then t.S_TD END) as S_MTD,
       MAX(CASE WHEN t.new_col = 'Q' then t.S_TD END) as S_QTD
FROM (
     SELECT ss.*,'D' as new_col FROM (Daily Query) ss
     UNION ALL
     SELECT ss1.*,'M' FROM (Monthly Query) ss1
     UNION ALL
     SELECT ss2.*,'Q' FROM (Quarter Query) ss2
     ) t
GROUP BY t.model_number,t.item_description,t.mrp,t.asin
注意:您必须将每日查询中的列S_FTD别名为S_TD,才能使其工作。

尝试使用select*from 在每个表之前

选择* 从…起 从中选择* 选择 tm.内部名称,如型号、tm.项目描述、tm.mrp、tm.asin、, 将产品序列号计数为S\U FTD 从…起 登记产品索赔 寄存器上的内部连接tbl\U型号tm\U产品\U索赔。型号\U编号=tm.asin 哪里 零售商代码='9017' 并登记产品索赔。dt='2016-08-04' 将tm.asin分组为s1 联合

SELECT *
FROM (
     Select * from
    (SELECT 
        tm.internal_name AS model_number, tm.item_description, tm.mrp, tm.asin,
        COUNT(product_serial_no) as S_FTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND register_product_claim.dt = '2016-08-04'
    GROUP BY tm.asin) as s1  
  Union

select * from


    (SELECT 

        COUNT(product_serial_no) as S_MTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND MONTH(register_product_claim.dt) = '08'
    GROUP BY tm.asin) as s2
 Union
Select * from
    (SELECT 

        COUNT(product_serial_no) as S_QTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND (MONTH(register_product_claim.dt) = '08'
            OR MONTH(register_product_claim.dt) = '07'
            OR MONTH(register_product_claim.dt) = '06')
    GROUP BY tm.asin) as s3

)
尝试使用select*from 在每个表之前

选择* 从…起 从中选择* 选择 tm.内部名称,如型号、tm.项目描述、tm.mrp、tm.asin、, 将产品序列号计数为S\U FTD 从…起 登记产品索赔 寄存器上的内部连接tbl\U型号tm\U产品\U索赔。型号\U编号=tm.asin 哪里 零售商代码='9017' 并登记产品索赔。dt='2016-08-04' 将tm.asin分组为s1 联合

SELECT *
FROM (
     Select * from
    (SELECT 
        tm.internal_name AS model_number, tm.item_description, tm.mrp, tm.asin,
        COUNT(product_serial_no) as S_FTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND register_product_claim.dt = '2016-08-04'
    GROUP BY tm.asin) as s1  
  Union

select * from


    (SELECT 

        COUNT(product_serial_no) as S_MTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND MONTH(register_product_claim.dt) = '08'
    GROUP BY tm.asin) as s2
 Union
Select * from
    (SELECT 

        COUNT(product_serial_no) as S_QTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND (MONTH(register_product_claim.dt) = '08'
            OR MONTH(register_product_claim.dt) = '07'
            OR MONTH(register_product_claim.dt) = '06')
    GROUP BY tm.asin) as s3

)

如果这是非常基本的,我很抱歉,但我在“字段列表”中得到了1054-未知列“t.S_MTD”。我在查询中没有看到t.S_MTD,您是否更改了什么?您需要在内部查询中将所有列S_FTD、S_MTD、S_QTD调用为S_TD。我编写的查询地址是S_TD而不是S_mtdal,因此无需选择/联合3次。在季度开始日期参数和季度结束日期参数之间的register_product_claim.dt位置很抱歉,如果这是非常基本的,但我在“字段列表”中得到了1054-未知列“t.S_MTD”,我在查询中没有看到t.S_MTD,您是否更改了什么?您需要在内部查询中将所有列S_FTD、S_MTD、S_QTD调用为S_TD。我编写的查询地址是S_TD而不是S_mtdal,因此无需选择/联合3次。在季度开始日期参数和季度结束日期参数之间的register_product_claim.dt位置
SELECT *
FROM (
     Select * from
    (SELECT 
        tm.internal_name AS model_number, tm.item_description, tm.mrp, tm.asin,
        COUNT(product_serial_no) as S_FTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND register_product_claim.dt = '2016-08-04'
    GROUP BY tm.asin) as s1  
  Union

select * from


    (SELECT 

        COUNT(product_serial_no) as S_MTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND MONTH(register_product_claim.dt) = '08'
    GROUP BY tm.asin) as s2
 Union
Select * from
    (SELECT 

        COUNT(product_serial_no) as S_QTD
    FROM
        register_product_claim
    INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
    WHERE
        retailer_code = '9017'
            AND (MONTH(register_product_claim.dt) = '08'
            OR MONTH(register_product_claim.dt) = '07'
            OR MONTH(register_product_claim.dt) = '06')
    GROUP BY tm.asin) as s3

)