我正在使用SQL Server2014。我的数据库包含2个表。 “ DW”和“ STG2”。 DW保留了我的数据的历史记录,而STG表仅保存了以后的每日数据。 DW表的结构如下:HID,票号,ISS_IND。 STG2表的结构仅为HID。两个表中的HID都是相同的,我们可以在查询中显示的ID上加入它们。 DW表的此ISS_IND列可以包含以下值:F,I,U,R,W和Y。如果记录包含F,I或U值,则将其视为同一类别,称为“ Primeissue”,并且该记录包含R,W或Y,则将其视为同一类别,即重新发行。下面是DW表:
HID Ticketnumber ISS_IND
1000 123 F
1000 123 I
1000 123 U
1001 456 F
1001 456 R
1001 456 I
STG2表:
HID
1000
1001
现在我们可以注意到,HID 1001具有不同的类别F,即主要发行者和R,其重新发行。现在,我想通过查询来获取此类记录
目前,我刚刚加入他们,到目前为止还无法实现原始发行和重新发行的逻辑。
select
STG2_SBR_STTK_NWTST.HID,DW_SBR_STTK_NWTST.Ticketnumber
,DW_SBR_STTK_NWTST.IS_IND
from DW_SBR_STTK_NWTST
JOIN STG2_SBR_STTK_NWTST ON STG2_SBR_STTK_NWTST.HID=DW_SBR_STTK_NWTST.HID
输出:
HID Ticketnumber
1001 456
有关如何获取此类记录的任何指导?谢谢。
答案 0 :(得分:2)
按DECLARE @DataSource TABLE
(
[ID] INT
,[Title] VARCHAR(4)
,[DecimalDigit] TINYINT
);
INSERT INTO @DataSource ([ID], [Title], [DecimalDigit])
VALUES (1, 'USD', 2)
,(2, 'EUR', 2)
,(3, 'JYN', 4)
,(4, 'TBH', 0);
SELECT
'[' +
STUFF
(
(
SELECT ',{id:' + CAST([ID] AS VARCHAR(12)) + ', title: "' + [Title] + '", decimaldigit:' + CAST([ID] AS VARCHAR(12)) +'}'
FROM @DataSource
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
,1
,1
,''
)
+ ']';
分组,并使用HID
子句检查它是否同时具有这两个类别。
HAVING
答案 1 :(得分:0)
另一种可能的方法(基于您的语句)是使用SUM()函数进行计算,并为每个类别获取总和大于0的行:
-- Tables
CREATE TABLE #DW_SBR_STTK_NWTST (
HID int,
Ticketnumber int,
ISS_IND varchar(1)
)
CREATE TABLE #STG2_SBR_STTK_NWTST
(
HID int
)
INSERT INTO #DW_SBR_STTK_NWTST
(HID, Ticketnumber, ISS_IND)
VALUES
(1000, 123, 'F'),
(1000, 123, 'I'),
(1000, 123, 'U'),
(1001, 456, 'F'),
(1001, 456, 'R'),
(1001, 456, 'I')
INSERT INTO #STG2_SBR_STTK_NWTST
(HID)
VALUES
(1000),
(1001)
-- Statement
SELECT
#STG2_SBR_STTK_NWTST.HID,
#DW_SBR_STTK_NWTST.Ticketnumber
FROM #DW_SBR_STTK_NWTST
JOIN #STG2_SBR_STTK_NWTST ON (#STG2_SBR_STTK_NWTST.HID = #DW_SBR_STTK_NWTST.HID)
GROUP BY #STG2_SBR_STTK_NWTST.HID, #DW_SBR_STTK_NWTST.Ticketnumber
HAVING
(SUM(CASE WHEN #DW_SBR_STTK_NWTST.ISS_IND IN ('F', 'I', 'U') THEN 1 ELSE 0 END) > 0) AND
(SUM(CASE WHEN #DW_SBR_STTK_NWTST.ISS_IND IN ('R', 'W', 'Y') THEN 1 ELSE 0 END) > 0)
输出:
HID Ticketnumber
1001 456