如何匹配将改变的确切列值

时间:2017-09-18 06:20:57

标签: sql sql-server

使用SQL我需要查询一个表,该表具有通过字母和数字代码的组合识别的库存项目列。每个都在一个单独的列中,所以我可以有多个相同或不同的alpha代码以及相应的数字。反过来,这些链接到客户订单表。

查询和返回结果的最佳方式是什么,其中每个客户订单的所有库存商品都具有相同的alpha代码?

stockitem alpha值会因一个订单而异,因此我没有匹配的静态值。我想我需要验证找到的第一个stockitemalpha值,并将其与所有与特定clientorderid相关联的剩余stockitemalpha匹配?

co.clientordersreference    | si.stockitemalpha
------------------------------------------------
1234                        | aaa
1234                        | aaa
1234                        | bbb
4343                        | ccc
4343                        | ccc
5454                        | ddd
5454                        | mmm

数据返回:

co.clientordersreference    | si.stockitemalpha |  stockitemalphacount 
-----------------------------------------------------------------------
1234                        | aaa               |  1
1234                        | bbb               |  1
4343                        | ccc               |  1
5454                        | ddd               |  1
5454                        | ccc               |  1
5454                        | mmm               |  1

而我期望每个客户订单引用应用计数的结果,例如:

co.clientordersreference    | stockitemalphacount
------------------------------------------------
1234                        | 2
4343                        | 1
5454                        | 3

我的初步查询是:

Select co.clientordersreference, si.stockaitemalpha

from clientorders co, stockitem si
where co.id = si.id
and distinct(si.stockitemalpha) -- this is criteria I'm unsure of

group by co.clientordersreference

1 个答案:

答案 0 :(得分:1)

根据您更新的问题,您可以尝试汇总客户订单并获取不同数量的库存商品。

SELECT
    co.clientordersreference,
    COUNT(DISTINCT si.stockitemalpha) AS COUNT(DISTINCT si.stockitemalpha)
FROM clientorders co
INNER JOIN stockitem si
    ON co.id = si.id
GROUP BY
    co.clientordersreference