T-SQL 查询在紧接着运行时返回不同数量的行

2024-02-17

下午所有

奇怪的是这个。我编写了一个相当简单的查询,并且我认为它工作正常。但是,当我一次又一次地多次运行查询时,每次都会得到不同的行数。它是一个实时数据库,但除了我之外,今天没有人使用它。我在参数中设置的日期范围是过去的日期,因此新的\已删除的记录不应影响它。所以我有点困惑为什么有时我会得到更多的行,有时会更少的行,而我每次都应该返回相同的行。复制下面的代码

DECLARE 
        @From date,
        @To date

SET @From = '01/07/2015'
SET @To = '31/12/2015'

--AS


SELECT DISTINCT
    BR.Branch, 
    DIV.Division,
    BCM.ClientRef@ AS 'Client Reference',
    BPY.PolicyRef@ AS 'Policy Reference',
    AE.Name AS 'Account Executive',
    DIV2.#Name AS 'Account Handler',
    BTX.Dt_raised AS 'Effective Date',
    BTX.Ledger_dt AS 'Ledger Date',
    INS.VTDescription AS 'Insurer',
    BPY.Ptype AS 'Policy Type',
    BTX.Orig_Debt AS 'GWP',
    COALESCE(BTX.Comm_amt, 0) AS 'Commission',
    CASE
        WHEN BTX.Ccode = '7' THEN 0
        ELSE COALESCE(CHG.Orig_Debt, 0)
    END AS 'Fee',
    COALESCE(BTX.Comm_amt, 0) + CASE WHEN BTX.Ccode = '7' THEN 0 ELSE COALESCE(CHG.Orig_Debt, 0) END AS 'Income',
    CASE DATENAME(MONTH, BTX.Dt_Raised)
        WHEN 'July' THEN YEAR(BTX.Dt_Raised)
        WHEN 'August' THEN YEAR(BTX.Dt_Raised)
        WHEN 'September' THEN YEAR(BTX.Dt_Raised)
        WHEN 'October' THEN YEAR(BTX.Dt_Raised)
        WHEN 'November' THEN YEAR(BTX.Dt_Raised)
        WHEN 'December' THEN YEAR(BTX.Dt_Raised)
        WHEN 'January' THEN YEAR(DATEADD(YEAR, -1, BTX.Dt_Raised))
        WHEN 'February' THEN YEAR(DATEADD(YEAR, -1, BTX.Dt_Raised))
        WHEN 'March' THEN YEAR(DATEADD(YEAR, -1, BTX.Dt_Raised))
        WHEN 'April' THEN YEAR(DATEADD(YEAR, -1, BTX.Dt_Raised))
        WHEN 'May' THEN YEAR(DATEADD(YEAR, -1, BTX.Dt_Raised))
        WHEN 'June' THEN YEAR(DATEADD(YEAR, -1, BTX.Dt_Raised))
    END AS 'FinYear',
    CASE DATENAME(MONTH, BTX.Dt_Raised)
        WHEN 'January' THEN 'Ja'
        WHEN 'February' THEN 'Fe'
        WHEN 'March' THEN 'Ma'
        WHEN 'April' THEN 'Ap'
        WHEN 'May' THEN 'My'
        WHEN 'June' THEN 'Ju'
        WHEN 'July' THEN 'Jy'
        WHEN 'August' THEN 'Au'
        WHEN 'September' THEN 'Se'
        WHEN 'October' THEN 'Oc'
        WHEN 'November' THEN 'No'
        WHEN 'December' THEN 'De'
    END AS 'Month Letter',
    DATENAME(MONTH, BTX.Dt_Raised) AS 'MonthName',
    CASE DATENAME(MONTH, BTX.Dt_Raised)
        WHEN 'January' THEN 7
        WHEN 'February' THEN 8
        WHEN 'March' THEN 9
        WHEN 'April' THEN 10
        WHEN 'May' THEN 11
        WHEN 'June' THEN 12
        WHEN 'July' THEN 1
        WHEN 'August' THEN 2
        WHEN 'September' THEN 3
        WHEN 'October' THEN 4
        WHEN 'November' THEN 5
        WHEN 'December' THEN 6
    END AS 'Order',
    CASE ROW_NUMBER() OVER (PARTITION BY BCM.ClientRef@ ORDER BY BCM.ClientRef@)
        WHEN 1 THEN 1 ELSE 0
    END AS 'Client Count', 
    CASE ROW_NUMBER() OVER (PARTITION BY BPY.PolicyRef@ ORDER BY BPY.PolicyRef@)
        WHEN 1 THEN 1 ELSE 0
    END AS 'Policy Count'
FROM icp_yyclient AS BCM 
INNER JOIN icp_brpolicy AS BPY ON BCM.ClientRef@ = BPY.ClientRef@ AND BCM.Branch@ = BPY.Branch@
INNER JOIN icp_brcledger AS BTX ON BPY.PolicyRef@ = BTX.PolicyRef@ AND BPY.Branch@ = BTX.Branch@
LEFT JOIN icp_brcledger AS CHG ON BTX.Chg_ptr = CHG.Suffix AND BTX.PolicyRef@ = CHG.PolicyRef@ AND BTX.Branch@ = CHG.Branch@
LEFT JOIN AccountExecutives AS AE ON BCM.Job1 = AE.Code
LEFT JOIN icp_bredetail AS DIV2 ON BPY.#Exec = DIV2.Code AND BPY.Branch@ = DIV2.Branch@
LEFT JOIN Division_VT AS DIV ON DIV2.Ext_department = DIV.Division
LEFT JOIN Branch_VT AS BR ON DIV.Branch = BR.VTId
LEFT JOIN icp_INSC_VT AS INS ON BPY.Insco_INSC_VTId = INS.VTId

WHERE
    BPY.Branch@ = 0
    AND BTX.Dt_Raised BETWEEN @From AND @To
    AND (BTX.Trantype IN ('New Business') AND BTX.Trantype <> 'Charge')
    AND (BPY.Term_code IS NULL AND BPY.Term_date IS NULL)
ORDER BY BR.Branch, DIV.Division, BCM.ClientRef@

这是一个简单的例子,说明了如何ROW_NUMBER()查询会影响结果的数量:

declare @t table (a int, b int, c int)
insert into @t(a,b,c) values
(1,1,1),
(1,1,1),
(1,1,2)

select distinct a,c,CASE ROW_NUMBER() OVER (ORDER BY b) WHEN 1 THEN 1 ELSE 0 END
from @t

你会注意到我的ORDER BY子句是不足的了解哪些行将被分配哪些行号。运行这个查询,我通常会得到:

a           c           
----------- ----------- -----------
1           1           0
1           1           1
1           2           0

然而,this结果集也是可能的:

a           c           
----------- ----------- -----------
1           1           0
1           2           1

这仅取决于哪一行被分配行号 1。

如果您想要确定性,请确保在您的PARTITION and ORDER BY条款,以便您know每行分配的行号将被唯一确定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

T-SQL 查询在紧接着运行时返回不同数量的行 的相关文章

  • 如何在 Spring Data 中选择不同的结果

    我在使用简单的 Spring Data 查询或 Query 或 QueryDSL 在 Spring Data 中构建查询时遇到问题 如何选择三列 研究 国家 登录 不同的行 并且查询结果将是用户对象类型的列表 Table User Id S
  • Magento --“SQLSTATE[23000]:违反完整性约束..”客户更新

    迁移服务器后 每次尝试更新客户信息时都会出现错误 我正在使用一个客户激活插件 http www magentocommerce com magento connect vinai extension 489 customer activat
  • 如何连续添加起始行和下一行的值

    我只想创建一个 sql 查询 结果就像图片上的那样 类似于 SQL 中的斐波那契数列 Ex Column 1 10 则 Result 列的值为 Result 10 因为这是第一行 然后假设column1第二行的值为50 那么Result第二
  • SQL Server - 将行连接到逗号分隔的列表中

    假设我有一个临时表 如下所示 Id Value 1 1 1 2 1 3 2 1 2 2 我希望我的桌子是这样的 Id ValueList 1 1 2 3 2 1 2 所以基本上我需要将我的值分组为逗号分隔的列表 我已经尝试过以下操作 SEL
  • hive sql查找最新记录

    该表是 create table test id string name string age string modified string 像这样的数据 id name age modifed 1 a 10 2011 11 11 11 1
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • SQL Server 2008 错误 233

    我正在使用以下 sql 脚本在 SQL Server 2008 中创建新登录名 CREATE LOGIN xyz WITH PASSWORD xyz DEFAULT DATABASE master DEFAULT LANGUAGE us e
  • 以编程方式插入行(父行和子行)

    我正在使用 Spring 和 JDBCTemplate 该场景是 CUSTOMER 表和 ORDERS 表的父子关系 我想做一个插入 例如 1 个客户和 5 个订单 但我不确定如何以编程方式在 CUSTOMER 表中插入一行 如何获取 Or
  • 从字符串中删除某些字符

    我正在尝试删除某些字符 目前我的输出如下cityname district但我想删除cityname SELECT Ort FROM dbo tblOrtsteileGeo WHERE GKZ 06440004 Output B dinge
  • 跨数据库的用户定义类型

    我有一个数据库 其中包含我在多个数据库中使用的常用函数 这些函数之一采用表作为参数 该参数是用户定义的类型 我想知道是否有办法从另一个数据库调用这个函数 我尝试在其他数据库中定义类型 如下所示 DECLARE bits as Common
  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • 如何将SQL数据加载到Hortonworks中?

    我已在我的电脑中安装了 Hortonworks SandBox 还尝试使用 CSV 文件 并以表结构的方式获取它 这是可以的 Hive Hadoop nw 我想将当前的 SQL 数据库迁移到沙箱 MS SQL 2008 r2 中 我将如何做
  • 将两个表合并为一个输出

    假设我有两张表 已知营业时间 ChargeNum CategoryID Month Hours 111111 1 2 1 09 10 111111 1 3 1 09 30 111111 1 4 1 09 50 222222 1 3 1 09
  • 获取在任何日期创建的表的列表?

    我遇到了这样的情况 我想查找我在 2012 年 9 月 14 日 2012 年 9 月 14 日 在 sql server 上创建的表 是否有任何查询会列出在此日期创建的这些表 SELECT FROM sys tables WHERE cr
  • SQL 使用另一列的键和最大值设置列

    我需要根据同一 ID 的 duration 列的最大值更新 max register 列 将值设置为 1 其他值设置为 0 初始表 Id duration max register 1 0 0 1 7 0 1 3 0 2 10 0 2 5
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • IIF(...) 不是公认的内置函数

    我正在尝试在 Microsoft SQL Server 2008 R2 中使用它 SET SomeVar SomeOtherVar IIF SomeBool value when true value when false 但我收到一个错误
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 在Oracle中使用IW和MM

    我使用 IW 表示每周结果 使用 MM 表示每月结果 但我总是收到错误 ORA 00979 not a GROUP BY expression 00979 00000 not a GROUP BY expression 我的疑问是这些 We

随机推荐

  • 启用 mod_http2 并在conf文件中设置协议后,HTTP/2配置未运行[重复]

    这个问题在这里已经有答案了 在看似正确的安装之后 HTTP 2 似乎并未运行 我运行的是 CentOS 7 我安装了最新版本的 Apache 版本 httpd 2 4 35 5 el7 x86 64 并一直在尝试让 HTTP 2 正常工作
  • 自定义实体具体化

    有没有办法使用 EF6 注入自定义对象实例创建器 我需要做的是在矩阵化发生之前向 EF 提供实体实例 基本上我希望能够使用非无参数构造函数定义 POCO 实体 以便能够使用 DI 聚合 最终使用 EF 进行持久化 我知道我可以使用对象物化事
  • HTML 表单只读 SELECT 标签/输入

    根据 HTML 规范 selectHTML 中的标签没有readonly属性 只有一个disabled属性 因此 如果你想阻止用户更改下拉菜单 你必须使用disabled 唯一的问题是禁用的 HTML 表单输入不会包含在 POST GET
  • 如何使用多个其他列中的所有非 NA 值创建新列?

    我想创建一个列 d 其中包含其他列中的所有非 NA 值 我尝试了 ifelse 但无法弄清楚如何使其以正确的方式嵌套 以便也包含 c 列中的值 也许应该使用 ifelse 之外的其他东西 这是一个 虚拟 数据框 a lt c NA NA N
  • Chart.js 中的水平条形图

    我正在尝试使用 Chart js 2 3 0 绘制水平条形图 var MeSeContext document getElementById MeSeStatusCanvas getContext 2d var MeSeData label
  • 成员函数 .begin() 和 std::begin()

    调用成员函数 begin of std vector and std begin 右值会导致不同的输出 如以下测试所示 vector
  • 如何在 Python 2.7 中使用函数注释

    我在Ipython中看到了这个源代码 https github com ipython ipython blob e1e2e960315f0f98703f6b8b077b10c99d04d70a IPython core completer
  • 如何在 Android 的 Spinner View 中添加左侧可绘制元素

    您好 我正在尝试添加左侧可绘制对象Spinner但我没有找到任何属性 就像你在EditText using android drawableLeft drawable password drawable 有没有正确的方法可以实现相同的目标S
  • 如何在 Codeigniter 中播种数据

    迁移后如何在 CodeIgniter 中播种数据 迁移完成后 我想在表用户迁移后植入一些预定义用户 defined BASEPATH OR exit No direct script access allowed class Migrati
  • 如何在sql中获取上周的最后一天?

    如何在sql中获取上周的最后日期 我的意思是使用查询的上周日日期 无论实际的 DATEFIRST 设置如何 上周日都可以这样找到 SELECT DATEADD day 1 DATEPART weekday GETDATE DATEFIRST
  • 下载 csv 文件作为 AJAX 请求的响应

    我有一个名为 downloadUserAction 的端点 用于收集数据并下载 csv 文件 我面临的挑战是 使用单击功能上的按钮调用端点时不会下载该文件 但只有当我直接在浏览器中访问端点时才会下载该文件 经过研究 我发现不能使用 AJAX
  • 设置RatingBar Android中显示的星星数量下限

    使用android中的RatingBar小部件 您可以设置要显示的星星数量 但是有没有办法设置始终处于活动状态的星星数量的下限 举个例子 对一部电影或其他东西进行评分 但您不能提交 1 分的评分 如果严格来说这在框架中是不可能的 您可以使用
  • 如何将 Dialogflow v2 与 Angular 7 集成

    我正在使用 Dialogflow 构建一个聊天机器人 并使用内联编辑器将云函数部署到 firebase 然而 与 V1 相比 没有 javascript SDK 来与 API 交互 我被困住了 在文档中找不到任何有用的东西 您能否分享一些有
  • Xcode 6 / iOS 8 模拟器数据和 Bundle 文件夹脚本

    在 xcode 6 的最新更改中 app 文件和文档文件夹似乎不再驻留在 iPhone 模拟器目录中的同一文件夹中 以前 我们可以访问目录和 app 文件 Users me Library Application Support iPhon
  • JPA 提供者:为什么与非 PK 列的关系/FK 在 Hibernate 和 EclipseLink 中有效?

    我刚刚发现 JPA 不支持非主键列的正式关系 外键 看这里 JPA 规范是否允许引用非主键列 https stackoverflow com questions 5818373 jpa does the jpa specification
  • 在休眠实体和数据传输对象之间进行转换的好模式是什么?

    对于如何在 Hibernate 实体和 Web 服务返回的数据传输对象之间进行转换 我也有类似的问题和担忧 如本问题中所述 在 ejb3 中使用数据传输对象是否被认为是最佳实践 https stackoverflow com questio
  • 外键约束:何时使用 ON UPDATE 和 ON DELETE

    我正在使用 MySQL Workbench 设计我的数据库模式 这非常酷 因为您可以绘制图表并转换它们 P 不管怎样 我决定使用 InnoDB 因为它的外键支持 我注意到的一件事是 它允许您设置外键的 更新 和 删除 选项 有人可以在一个简
  • 您是否需要“取消连接”匿名函数/lambda

    我的理解是 在 C 中连接的任何事件处理程序都需要取消连接 Object myObject new Object myObject Event EventHandler Wired myObject Event EventHandler U
  • Oracle 侦听器未运行且无法启动

    我收到以下错误lsnrctl status命令 C Users pna105 gt lsnrctl stat LSNRCTL for 64 bit Windows Version 11 2 0 1 0 Production on 08 OC
  • T-SQL 查询在紧接着运行时返回不同数量的行

    下午所有 奇怪的是这个 我编写了一个相当简单的查询 并且我认为它工作正常 但是 当我一次又一次地多次运行查询时 每次都会得到不同的行数 它是一个实时数据库 但除了我之外 今天没有人使用它 我在参数中设置的日期范围是过去的日期 因此新的 已删