Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择SQL逻辑_Sql_Sql Server 2012 - Fatal编程技术网

选择SQL逻辑

选择SQL逻辑,sql,sql-server-2012,Sql,Sql Server 2012,乡亲们在这里不知所措 首先,这是我努力实现的目标: 从如下所示的表CUSTOMER\u ORDER\u DETAILS表中选择所有记录,如果同一客户不存在多个条目,则: -选择PAID=1的条目 -如果有多个PAID=1条目,则选择类型为Y的记录 预期结果: 877,CU115,发光,0,1,X 878,CU111,Toi,1,1,Y 879,CU117,佛罗里达州,1,1,X 我的方法是使用GROUPBY on CUSTOMER_NO获得count(CUSTOMER_NO)>1,但一旦我将

乡亲们在这里不知所措
首先,这是我努力实现的目标:


从如下所示的表CUSTOMER\u ORDER\u DETAILS表中选择所有记录,如果同一客户不存在多个条目,则:
-选择PAID=1的条目
-如果有多个PAID=1条目,则选择类型为Y的记录

预期结果:
877,CU115,发光,0,1,X
878,CU111,Toi,1,1,Y
879,CU117,佛罗里达州,1,1,X

我的方法是使用GROUPBY on CUSTOMER_NO获得count(CUSTOMER_NO)>1,但一旦我将表的其余列添加到Select语句中,count列就会显示值1。
任何解决此问题或实现if else逻辑的指针?

您可以在
行数
函数中使用
按顺序
条件对这些条件进行优先级排序

select * from (
select t.*,
row_number() over(partition by customer_no 
                  order by case when paid=1 and type='Y' then 1
                                when paid=1 then 2 
                                else 3 end) as rnum
from customer_orders t
) t 
where rnum=1
  • 如果同一客户号存在多个paid=1的行,则假定每个客户号只能有一行,且类型为='Y'
  • 如果存在多个paid=1的行,且所有行的类型均为“Y”,则会在其中任意选取一行

这是一个优先级查询。这里有一种方法可以满足您的需求:

select t.*
from (select t.*,
             row_number() over (partition by customer_no
                                order by paid desc, type desc
                               ) as seqnum
      from t
     ) t
where seqnum = 1;

这假设
paid
具有值0和1,并且
type
具有值
X
Y

mysql或sql server?最简单的解决方案是剖析您的逻辑并将它们组合起来,请尝试使用firstGordon,谢谢您的帮助。我们来读一下优先级查询。你能解释一下逻辑吗?这可能也会帮助其他人。@user1195192。运行子查询,您将看到发生了什么。您想要的行以
seqnum
作为“1”结尾。vkp,非常感谢。你能解释一下逻辑吗?这可能会帮助其他人well@user1195192 .. 我建议您在
row\u number
中尝试不同的
order by
条件,您将了解此查询的工作原理。