我想计算不同的两列。
在想象中的sql中,我写下如下:
COUNT(DISTINCT col1, col2)
在T-SQL中,这可以通过在子查询中进行一次分组,然后在外部查询中进行第二次分组来完成 - like this
据我所知,USQL没有子查询,所以我试图弄清楚如何做到这一点。我想我可以使用两个别名查询,但我想知道是否有更好的方法。
答案 0 :(得分:3)
U-SQL支持子查询。它尚未支持的是标量子查询和相关的子查询(而是使用两者的连接)。
所以解决方案
SELECT COUNT(*) AS count
FROM (SELECT DISTINCT DocumentId, DocumentSessionId
FROM DocumentOutputItems) AS internalQuery
或上述链接中提到的SUM(CASE)
与GROUP BY
一起工作。
或者,U-SQL还允许您命名内部查询并在外部语句中使用它,这使得脚本更容易阅读更复杂的情况(它类似于公共表表达式,因为它只命名查询并不执行它):
@inner =
SELECT DISTINCT DocumentId, DocumentSessionId
FROM DocumentOutputItems;
@result = SELECT COUNT(*) AS count FROM @inner;
答案 1 :(得分:1)
如果你不能使用子查询那么一个"丑陋"方法是连接列:
SELECT COUNT(DISTINCT String.Concat(col1, '^', col2))
FROM tab;
当然,您必须处理NULL并转换为正确的数据类型。