我有2个表,我正在尝试提取特定材料的记录。所以我的查询如下
单日查询
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
ORDER BY register_product_claim.dt DESC
LIMIT 0 , 30
月亮
SELECT tm.internal_name AS model_number, tm.item_description, tm.mrp, tm.asin, 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
ORDER BY register_product_claim.dt DESC
LIMIT 0 , 30
Qtr Wise
SELECT tm.internal_name AS model_number, tm.item_description, tm.mrp, tm.asin, 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
ORDER BY register_product_claim.dt DESC
LIMIT 0 , 30
一切正常。
现在我正在尝试合并所有查询。但我无法合并它们。联盟,加入,但没有运气。
最后一次尝试是
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为季度结果。
答案 0 :(得分:3)
您可以使用条件聚合来完成,将其调整为您的代码:
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
才能生效。
答案 1 :(得分:0)
尝试使用从* 中选择* 在每个表之前
eg.SELECT *
FROM(
从中选择*
(选择
tm.internal_name AS model_number,tm.item_description,tm.mrp,tm.asin,
COUNT(product_serial_no)为S_FTD
从
register_product_claim
INNER JOIN tbl_model tm ON register_product_claim.model_number = tm.asin
哪里
retailer_code = '9017'
AND register_product_claim.dt ='2016-08-04'
GROUP BY tm.asin)as 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
)