首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server中多列(超过10列)中重复行数

Server中多列(超过10列)中重复行数
EN

Stack Overflow用户
提问于 2017-03-29 14:22:29
回答 5查看 117关注 0票数 1

我在Server中有一个表,我需要查找行中具有不同值的客户和帐户的数量。

例如

代码语言:javascript
复制
Customer  Account    X   Y   Z
-------------------------------
A             001   X1   Y1  Z1
A             002   X2   Y1  Z1
A             003   X1   Y1  Z1
B             004   X3   Y2  Z2
B             005   X4   Y2  Z2
C             006   X5   Y3  Z3
C             007   X5   Y3  Z3

我希望结果是不同X,Y,Z的客户数量是2,受影响的帐户数是5。

代码语言:javascript
复制
Customer  Account   X   Y   Z
-------------------------------
A            001    X1  Y1  Z1
A            002    X2  Y1  Z1
A            003    X1  Y1  Z1
B            004    X3  Y2  Z2
B            005    X4  Y2  Z2
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-03-29 14:51:23

首先,这里是一些示例数据--如果您提出任何进一步的sql问题,请这样做:

代码语言:javascript
复制
declare @table table (Customer  char(1), Account char(3), X char(2), Y char(2), Z char(2));
insert into @table values 
('A', '001', 'X1', 'Y1', 'Z1'),
('A', '002', 'X2', 'Y1', 'Z1'),
('A', '003', 'X1', 'Y1', 'Z1'),
('B', '004', 'X3', 'Y2', 'Z2'),
('B', '005', 'X4', 'Y2', 'Z2'),
('C', '006', 'X5', 'Y3', 'Z3'),
('C', '007', 'X5', 'Y3', 'Z3');

创建2 ctes -一个用于为每个客户组合您的X、Y、Z列,另一个用于查看您有多少不同的组(每个客户)。

然后从原始表中选择所有信息,并在cte2上进行内部连接,仅限于重复的不匹配行的客户。

代码语言:javascript
复制
with cte as (
    select Customer, X, Y, Z from @table
    group by Customer, X, Y, Z
), cte2 as (
    select Customer, COUNT(*) groups
    from cte
    group by Customer
)
select t.Customer, t.Account, t.X, t.Y, t.Z
from @table t
inner join cte2 on t.Customer = cte2.Customer
where cte2.groups >1;
票数 0
EN

Stack Overflow用户

发布于 2017-03-29 14:39:18

要获得您的disired结果,您可以使用以下查询,我猜您不希望看到在该客户的所有行上具有相同x、y、z值的客户。如果是这样的话,折叠查询应该可以工作。

代码语言:javascript
复制
SELECT t.*
FROM <table> AS t INNER JOIN
    (
    SELECT DISTINCT customer
    FROM <table>
    GROUP BY customer, x,y,z
    HAVING COUNT(*) < 2
    ) AS difacc
    ON difacc.customer = t.customer

结果

代码语言:javascript
复制
Customer  Account X   Y   Z
A         001     X1  Y1  Z1
A         002     X2  Y1  Z1
A         003     X1  Y1  Z1
B         004     X3  Y2  Z2
B         005     X4  Y2  Z2
票数 0
EN

Stack Overflow用户

发布于 2017-03-29 14:55:52

你可以试试这么长的路

代码语言:javascript
复制
SELECT * FROM CUST WHERE CUSTOMER in (SELECT CUSTOMER FROM CUST 
GROUP BY CUSTOMER, X, Y, Z
HAVING COUNT(X)=1 AND COUNT(Y)=1 AND COUNT(Z)=1)

如果任何一个有良好sql知识的人都能缩短时间,那将对你有好处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43096278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档