我在SQL Server中有一个表,我需要查找在该行中具有不同值的客户和帐户的数量。
例如
get-acl AD:dc=contoso,dc=org
我希望结果为不同X,Y,Z的客户数量为2,受影响的帐户数量为5。
(defmacro -pred->
[pred body]
`(when (~pred ~body) ~body))
(macroexpand-1 '(-pred-> odd? 3))
=> (clojure.core/when (odd? 3) 3)
(-pred-> odd? 3)
=> 3
(-pred-> odd? 2)
=> nil
答案 0 :(得分:0)
要获得您的废弃结果,您可以使用以下查询,我猜您不希望看到在该客户的所有行上具有相同x,y,z值的客户。如果是这样,以下查询应该有效。
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
结果
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
答案 1 :(得分:0)
首先是一些示例数据 - 请为您提出的任何进一步的SQL问题执行此操作:
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上选择内部联接,以限制只有重复不匹配行的客户。
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;
答案 2 :(得分:0)
你可以尝试这么长的路
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知识的人可以缩短它将对你有好处。
答案 3 :(得分:0)
我对此的看法:
select *
from <table>
where customer in (
select customer
from <table>
group by customer, concat(x,y,z)
having count(concat(x,y,z)) = 1
)
答案 4 :(得分:0)
在Tableau中,将Customer放在筛选器架上,并在筛选器的条件选项卡上输入条件countd([X]) = 1 and countd([Y]) = 1 and countd([Z]) = 1
这将只包括您提到的每个列中只有一个唯一值的客户(X,Y和Z)。它导致Tableau发出的SQL相当于“ group by customer count having distinct(distinct X)= 1 and ... ”
如果允许您的列具有空值,并且如果这会影响您要包含的客户(例如,如果偶尔为Z设置空值,则应排除客户),那么您可以相应地调整您的条件,比如使用计数()函数也是ifnull()函数。