相关疑难解决方法(0)

T-SQL Group By; 包含或IfAny

SQL2005和/或SQL2008在T-SQL中是否存在任何类型的内置聚合,包含Contains或IfAny或其他什么?组中任何一个等于值的东西?类似于Max(xyz)=value但不限于最大值.

Select custID, case when Min(ProductGroup)= "A" then 'Have Ordered Group A' else 'Haven't Ordered Group A' end hasOrdered
from orders
inner join products on ordPoductId = productID
group by custID
Run Code Online (Sandbox Code Playgroud)

这适用于单个值比较,如果它是最小/最大,但我想要类似的东西:

Select custID, case when contains(ProductGroup, "G") then 'Have Ordered Group G' else 'Haven't Ordered Group G' end hasOrdered
from orders
inner join products on ordPoductId = productID
group by custID
Run Code Online (Sandbox Code Playgroud)

我可以使用Min(ProductGroup)="A",如果我关注的值是min/max或者将from-clause更改为('G'然后0其他1结束的情况)以创建假最大值.目前我只关注单个值,但如果可能的话,我想要更直观和灵活的东西.有任何想法吗?

sql t-sql sql-server sql-server-2005 sql-server-2008

5
推荐指数
1
解决办法
4045
查看次数

检查每个组的列中是否存在值

我很难将我想要做的事情转化为文字,所以搜索也很困难.

基本上我试图查看列中是否存在某个值,按组分区,然后向前传播该值.

在这个例子中,我想检查用户是否已经完成了教程并设置了一个前进的标志.

pk | user | ... | activity
 1 |    A | ... |  "login"
 2 |    A | ... |  "started_tutorial"
 3 |    A | ... |  "completed_tutorial"
 4 |    A | ... |  "some other activity"
 5 |    A | ... |  "logout"
 5 |    B | ... |  "login"
 6 |    B | ... |  "logout"
Run Code Online (Sandbox Code Playgroud)

我认为这应该是这样的

select *,
    check(activity in ('completed_tutorial')) as completed_activity
    from tbl
Run Code Online (Sandbox Code Playgroud)

但我不认为我可以check在select语句中使用,这将是一个常量标志,而不是只有在找到后才设置为true.

我想要得到的例子:

pk | user | ... …
Run Code Online (Sandbox Code Playgroud)

sql postgresql

5
推荐指数
2
解决办法
7491
查看次数