小编Edm*_*und的帖子

如何选择组中每列的最后一组非 NULL 值?

我正在使用 SQL Server 2016 并且我使用的数据具有以下形式。

CREATE TABLE #tab (cat CHAR(1), t CHAR(2), val1 INT, val2 CHAR(1));

INSERT INTO #tab VALUES 
    ('A','Q1',2,NULL),('A','Q2',NULL,'P'),('A','Q3',1,NULL),('A','Q3',NULL,NULL),
    ('B','Q1',5,NULL),('B','Q2',NULL,'P'),('B','Q3',NULL,'C'),('B','Q3',10,NULL);

SELECT *
FROM    #tab;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我想获取列上的最后一个非空值,val1并按val2分组cat和排序t。我寻求的结果是

cat  val1 val2
A    1    P
B    10   C
Run Code Online (Sandbox Code Playgroud)

我最接近的是使用LAST_VALUE而忽略ORDER BY哪个不起作用,因为我需要有序的最后一个非空值。

SELECT DISTINCT 
        cat, 
        LAST_VALUE(val1) OVER(PARTITION BY cat ORDER BY (SELECT NULL) ) AS val1,
        LAST_VALUE(val2) OVER(PARTITION BY cat ORDER BY (SELECT NULL) ) AS val2
FROM    #tab
Run Code Online (Sandbox Code Playgroud)
cat  val1 val2 …
Run Code Online (Sandbox Code Playgroud)

sql-server window-functions

11
推荐指数
2
解决办法
2万
查看次数

在不使用 CLR 的情况下创建数据库级常量(枚举)?

我有几个 SQL 对象,它们需要根据请求的所需状态采取备用操作。有没有办法创建可以传递给存储过程、表值函数并在查询中使用(不使用 CLR)的数据库级常量(枚举)?

CREATE PROCEDURE dbo.DoSomeWork(@param1 INTEGER, ..., @EnumValue myEnumType)  AS ...;
Run Code Online (Sandbox Code Playgroud)

然后使用它:

EXEC doSomeWork 85, ..., (myEnumType.EnumValue1 + myEnumType.EnumValue2);
Run Code Online (Sandbox Code Playgroud)

哪里myEnumType会保存一些枚举值。

在该过程中,我将能够使用@EnumValue它并针对其中的值对其进行测试myEnumType以完成所需的工作。我会myEnumType为我正在考虑的情况设置位掩码的值。

举一个简单的例子,考虑一个昂贵的过程,它需要一个巨大的数据集,并将其缩减为一个较小但仍然非常大的数据集。在这个过程中,您需要在该过程中进行一些会影响结果的调整。假设这是根据减少中的中间计算的某些状态过滤(或反对)某些类型的记录。该@EnumValue类型的myEnumType可以用来测试此

SELECT   ...
FROM     ...
WHERE       (@EnumValue & myEnumType.EnumValue1 = myEnumType.EnumValue1 AND ...)
        OR  (@EnumValue & myEnumType.EnumValue2 = myEnumType.EnumValue2 AND ...)
        OR  ...
Run Code Online (Sandbox Code Playgroud)

在不使用 CLR 的情况下,SQL Server 中是否可以使用这些类型的数据库级常量?

我正在寻找可以作为参数传递给存储过程、函数等的数据库级枚举或常量集。

sql-server enum sql-server-2016

9
推荐指数
3
解决办法
1639
查看次数

如何重新编译 SQL Server 数据库中的所有存储过程和表值函数?

在 SQL Server 数据库sp_recompile上可以运行一个存储过程来更新执行计划。我想在数据库中的所有存储过程上运行它。另外,我想在所有表值函数上运行它的等效函数,但我不知道要运行哪个 sys 过程。

是否可以在不sp_recompile为 SQL Server Management Studio 中的所有存储过程名称手动输入一行的情况下执行此操作?同样对于表值函数?

我相信我需要这样做,因为 VM SQL Server 的内存显着增加,但我只看到执行时间略有增加。执行计划显示 80% 以上的运行时间都在聚集索引查找上,所以我认为我可以做更多的事情来优化存储过程。

sql-server stored-procedures set-returning-functions

8
推荐指数
3
解决办法
2万
查看次数

如何在 SSMS 的“执行计划”选项卡中复制和粘贴“缺失索引”?

尽管盲目创建建议的缺失索引不太理想,但有没有办法从 SQL Server Management Studio 的“执行计划”选项卡中复制和粘贴建议的缺失索引?

鼠标悬停在它上面时,您会得到一个工具提示,但似乎没有右键单击菜单复制它们。多年来,我只是输入了我需要的任何内容,但很好奇是否可以从选项卡中轻松获取基本表格。

使用 SSMS 2017

sql-server ssms

3
推荐指数
2
解决办法
3118
查看次数

T-SQL 和 MDX 之间最相关的相似之处是什么?

我使用过 T-SQL(CTE、窗口函数、递归 CTE、大数据、表值函数、APPLY、PIVOT、存储过程等),但从未查询过 Microsoft SSAS 多维数据集。

对于以下 T-SQL 概念,MDX 中是否有类似的概念?

  • 转轴
  • 窗口函数
  • 递归公用表表达式

使用 MDX 的 T-SQL 用户是否有任何陷阱?

我希望 T-SQL 和 MDX 之间有一些共同的类比,这将有助于擅长 T-SQL 的人过渡到 MDX。

如果有一个关于从 T-SQL 进入 MDX 时所犯的常见错误的指南,那就太好了。

sql-server learning ssas t-sql mdx

2
推荐指数
1
解决办法
208
查看次数