MySQL将2个单独的查询合并为1个

时间:2018-02-16 17:22:36

标签: mysql sql

我需要生成一份报告,我会跟踪某个地点的入站和出站货件,结果是每个SKU进出的数量都计算在内。

“入站”SKU将 dest_loc 设置为“LOC1”,而“出站”SKU将 source_loc 设置为“LOC1”, LOC1是参考位置。

有一个名为“REC”的特殊目的地值,意思是“再生”。

每个SKU都有source_loc和dest_loc值(无空例)。此示例有三个SKU和5个可能的位置。

sku source_loc  dest_loc
sku1    LOC2    LOC1
sku1    LOC1    LOC1   <-- src=dest is a valid case
sku2    LOC3    LOC1
sku3    LOC4    LOC1
sku3    LOC4    LOC1
sku3    LOC1    LOC4
sku3    LOC1    LOC3
sku1    LOC1    LOC2
sku2    LOC3    LOC1
sku2    LOC1    REC

最终报告如下:

sku     inbound     outbound    recycle
sku1    2           1           0
sku2    2           0           1
sku3    2           2           0

我可以使用以下方法获得一个数据:

SELECT sku, count(*)
    FROM skudata
    WHERE `dest_loc` = "LOC1"
    GROUP BY `sku`, `source_loc`
    ORDER BY `sku`;

我还需要添加WHERE source_loc =&#34; LOC1&#34;。我可以单独运行两个查询,但是我必须将结果拼接在一起,这将是一个痛苦。我怎样才能更好地编写查询以包含&#34;方向&#34;?

2 个答案:

答案 0 :(得分:0)

查看您的数据似乎表明您正在寻找不同的计数

function loadPage(url){
    var xhr= new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.onreadystatechange= function() {
        if (this.readyState!==4) return;
        if (this.status!==200) return; 
        document.getElementById('maindiv').innerHTML= this.responseText;
    };
    xhr.send();
}

答案 1 :(得分:0)

您正在寻找多个WHERE语句。这些可以作为条件放在SELECT部分​​中:

SELECT 
  sku,
  SUM(IF(dest_loc   = 'LOC1', 1, 0)) AS inbound,
  SUM(IF(source_loc = 'LOC1', 1, 0)) AS outbound,
  SUM(IF(dest_loc   = 'REC' , 1, 0)) AS recycle
FROM skudata
GROUP BY sku