我需要按GroupName明智地对客户进行分组。客户可以在每个GroupName上重复。每个GroupName在表OCQG中都有一个唯一的编号,称为“ GroupCode”。客户表(OCRD)的每个GroupCode都有单独的列。例如,C-0001客户可以有更多的组名。我们可以通过查看Group1,...,Group64列值(如果该值= Y)来标识每个客户的GroupCode。如果表结构如下,请帮助我。
OCRD表;
答案 0 :(得分:1)
UNPIVOT可能会帮助...
SELECT p.customerCode, REPLACE(p.groupcode,'GROUP','') groupcode, ocqg.groupname
FROM ocrd UNPIVOT
( value
FOR groupcode IN ([Group1],[Group2],[Group3], etc...)
) as p,
ocqg
WHERE value = 'Y' and
ocqg.groupcode = REPLACE(p.groupcode,'GROUP','')
order by p.customerCode
答案 1 :(得分:0)
如果您需要计算每个组中的客户,我建议先使用apply
取消透视,然后再使用join
:
select ocqg.groupname, count(*)
from ocrd cross apply
(values (ocrd.group1, 1), (ocrd.group2, 2), . . .
) v(val, groupcode) join
ocqg
on v.groupcode = ocgq.groupcode
where v.val = 'Y'
group by ocqg.groupname;
请注意,ocrd
表的格式非常差。您应该有一个正确的联结/关联表,每个客户和每个组一行。