sql - 通过sql对分区计数不同

标签 sql sql-server tsql count distinct

我有一张这样的 table

col1ID  col2String Col3ID Col4String Col5Data
  1        xxx       20      abc     14-09-2018
  1        xxx       20      xyz     14-09-2018
  2        xxx       30      abc     14-09-2018
  2        xxx       30      abc     14-09-2018 

我想添加一列,按 col1ID 和 col3ID 计算我在 col4String 组中有多少个不同的字符串。

类似

COUNT(DISTINCT (Col4String)) over (partition by col1ID, col3ID)

但它不起作用,我收到一个错误

Use of DISTINCT is not allowed with the OVER clause.
Msg 102, Level 15, State 1, Line 23.

我有更多列,例如 col2String、col5Data,但它们不应该受到影响,所以我不能在 SELECTdense_rank() 的开头使用 distinct在我的情况下似乎也不起作用。

感谢您的帮助。

最佳答案

试试这个:

DECLARE @DataSource TABLE
(
    [col1ID] INT
   ,[col2String] VARCHAR(12) 
   ,[Col3ID]  INT
   ,[Col4String]  VARCHAR(12)
   ,[Col5Data] DATE
);

INSERT INTO @DataSource
VALUES (1, 'xxx', 20, 'abc', '2018-09-14')
      ,(1, 'xxx', 20, 'xyz', '2018-09-14')
      ,(2, 'xxx', 30, 'abc', '2018-09-14')
      ,(2, 'xxx', 30, 'abc', '2018-09-14');

SELECT *
     ,dense_rank() over (partition by col1ID, col3ID order by [Col4String])  + dense_rank() over (partition by col1ID, col3ID order by [Col4String] desc) - 1
FROM @DataSource

enter image description here

关于sql - 通过sql对分区计数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53517860/

相关文章:

android - android中如何处理数据

c# - 从数据库获取值(value)到 Linq where 子句

连接表的 SQL 别名

sql - 如果 B 列为 Null,如何从 A 列插入数据;如果 A 列为 Null,如何从 B 列插入数据

sql - 如何在 PostgreSQL 查询中声明变量

sql - 在 HSQLDB 1.8 中作为单个数据库事务的条件插入?

sql - Postgresql EXCLUDE 约束在 INSERT 时不触发 ON CONFLICT

SQL Server 查询需要 3 分 40 秒。如何改善执行时间?

sql - 使用自定义 "as"语句将行转换为列

sql - T-SQL 中带有 PIVOT 命令的 GROUP BY 语句