更新此帖子以提高清晰度。
以下问题归因于CROSS-APPLY(我也很难进行CROSS-JOIN),但是我找不到使用内部联接或分区方式的简单方法
2)确保每个唯一记录的顺序都... 174..175、176、177等。我希望这里有大约3200条记录,而不是我所得到的174000 ish。
有人可以提供我可以做些什么以确保我能按顺序获得记录吗?谢谢社区!查看代码和数据。
执行以下查询后-得到以下结果。如您在下面的数据中看到的,如果我通过合同订购,我会得到重复-我不应该将其与为每个交叉申请生成的ID关联。交叉应用导致生成具有不同ID的同一记录的这些重复项-一旦使用ID创建了记录,该记录的工作方式应该是该记录的唯一实例。
我还以粗体突出显示了代码的某些部分,这些部分使我获得的行ID紧随于上一所选行的ID的最新最大实例之后-但导致我重复。
因此,为了设置期望-子选择的下面的图像告诉我引用逻辑的表中已经存在的内容-告诉我不存在的内容
下一张图片告诉我,我的整个查询都在选择不存在的内容并生成从第174行开始的记录-很好,但是我很震惊,我收到了多少记录-只有3875个不同的合同所以我应该只会获得3875条记录-而不是您所看到的174ish。
Way too many records - see image
因此,我按Contract_TaskOrder对查询进行了重新排序-我看到大量重复项,并为重复项重新确定了新的ID。参见下图。交叉应用导致[Stage]。[BUD_PLN_Spendpln_Dataload_Staging_E_Grouped]表中合同的每个唯一实例的记录,并创建通过笛卡尔积定义的次数-这非常非常糟糕。我试图找到一种通过内部联接执行此操作的方法-但无济于事。
As you see - duplicates names of contracts - crap...see this
这是我的完整查询-需要改进粗体部分,以不仅允许删除重复项,而且还允许ID从174开始并按顺序排列以获取每个唯一的NAME(与Contract-TaskOrder关联)。如果我只是进行分区以包括每个组合的前1个或最大记录,那么根据该序列,我的记录将具有非常稀疏的ACLORDER ID。
SELECT * FROM
(
SELECT DISTINCT
'READWRITE' AS [ACCESSMODE],
3 AS [ACCESSMODEORDER],
**coalesce(const.maxs, 0) + row_number() over (
order by (select NULL)) AS [ACLORDER]**,
0 AS [ACLSFK],
'MEMBER' AS [FLAG],
4 AS [FLAGORDER],
'N' AS [ISUSER],
5 AS [ISUSERORDER],
('SPS-Contract-' + Contract_TaskOrder) AS [NAME],
0 AS [NAMEORDER],
Contract_TaskOrder AS [OBJECTNAME],
1 AS [OBJECTNAMEORDER],
'SL_DIMENSION' AS [OBJECTTYPE],
2 AS [OBJECTTYPEORDER],
NULL AS [PARENT],
NULL AS [PARENTORDER]
FROM
**[Stage].[BUD_PLN_Spendpln_Dataload_Staging_E_Grouped] cross apply (
select max(ACLORDER) as maxs
from [BFS_ODI_WORK].[Stage].[BUD_PLN_SECURITY_MEMBERS] ) const
)**
M
WHERE
1 = 1
AND NOT EXISTS
(
SELECT
1
FROM
[BFS_ODI_WORK].[Stage].[BUD_PLN_SECURITY_MEMBERS] k
WHERE
M.[NAME] = k.[NAME]
AND M.[FLAG] = k.[FLAG]
AND M.[OBJECTNAME] = k.[OBJECTNAME]
AND M.[OBJECTTYPE] = k.[OBJECTTYPE]
)
order by
NAME