我正在尝试附加一些虚拟数据以用作参考。
我正试图从数十万个池中提取一组特定的帐号。该池由潜在客户和后续客户组成。潜在客户帐户以5位数字开头,以三个零结尾。以下帐户使用相同的5个数字,并更改最后三个。每个潜在客户帐户通常都有25-75个关注帐户。
我的目标是从某个潜在客户组中撤出所有关注账户。 我面临的问题是,关注帐户不包含我希望过滤掉的隐含条件。潜在客户有一个颜色代码,并且所有后续帐户都知道使用该颜色代码。不幸的是,这仅在线索上给出。
这是我到目前为止所拥有的:
Select
Account Number,
Color Code
From
Master.Table
Where
LEFT(Account Number, 5) =
(Select LEFT(Account Number, 5)
From Master.Table
Where Color Code IN ('Green', 'Magenta', 'Teal', 'Gray', 'Purple', 'Yellow', 'Beige'))
答案 0 :(得分:1)
您的代码基本上看起来正确。我会做一些小的修改:
Select t.AccountNumber, t.ColorCode
From Master.Table t
Where left(t.AccountNumber, 5) in (
Select left(t2.AccountNumber, 5)
From Master.Table t2
Where t2.ColorCode in ('Green', 'Magenta', 'Teal', 'Gray', 'Purple', 'Yellow', 'Beige') and
t2.AccountNumber like '%000'
);
注意:
IN
而不是=
。答案 1 :(得分:0)
您还可以使用联接在没有子查询的情况下执行某些操作
CREATE TABLE #tempTable (
accountNumber NVARCHAR(20),
colorCode NVARCHAR(20)
)
INSERT INTO #tempTable (
accountNumber,
colorCode
)
VALUES ('12345000','Magenta'),('12346000','Beige'),('12347000','Black'),
('12345123',''),('12346321',''),('12346387',''),('12347988','')
SELECT b.accountNumber, a.colorCode
FROM #tempTable a
LEFT JOIN #tempTable b
ON LEFT(a.accountNumber, 5) = LEFT(b.accountNumber, 5)
AND a.colorCode IN (
'Green',
'Magenta',
'Teal',
'Gray',
'Purple',
'Yellow',
'Beige'
)
WHERE RIGHT(b.accountNumber, 3) <> '000'
DROP TABLE #tempTable
这将返回
accountNumber colorCode
12345123 Magenta
12346321 Beige
12346387 Beige