Sql 我试图在每一行中返回特定的值,这取决于该行中的不同值是否已经在不同的表中
我仍然是SQL的n00b,遇到了麻烦。我所拥有的是根据特定条件在临时表中初始选择特定ID:Sql 我试图在每一行中返回特定的值,这取决于该行中的不同值是否已经在不同的表中,sql,conditional,row,Sql,Conditional,Row,我仍然是SQL的n00b,遇到了麻烦。我所拥有的是根据特定条件在临时表中初始选择特定ID: SELECT DISTINCT ID INTO #TEMPTABLE FROM ICC WHERE ICC_Code = 1 AND ICC_State = 'CA' 在后面的查询中,我选择了一个不同且更长的ID列表以及其他表中的其他数据。这个SELECT大约有20列宽,是我的结果集。我希望能够做的是向该结果集中添加一个额外的列,该列的每个值为TRUE或FALSE。如果行中的ID是可诱惑的,则附加列的值
SELECT DISTINCT ID
INTO #TEMPTABLE
FROM ICC
WHERE ICC_Code = 1 AND ICC_State = 'CA'
在后面的查询中,我选择了一个不同且更长的ID列表以及其他表中的其他数据。这个SELECT大约有20列宽,是我的结果集。我希望能够做的是向该结果集中添加一个额外的列,该列的每个值为TRUE或FALSE。如果行中的ID是可诱惑的,则附加列的值应为TRUE。如果不是,则为假。这样,添加的列将在每一行上准备好TRUE或FALSE,这取决于每一行中的ID是否处于可诱惑状态
第二个选择类似于:
SELECT ID,
ColumnA,
ColumnB,
...
NEWCOLUMN
FROM ...
每行的NEWCOLUMN值将取决于返回的该行中的ID是否处于可诱惑状态
这里有人有什么建议吗
谢谢,
Matt您需要将结果查询左键连接到ID上的可诱惑项,如果有ID,这将为您提供ID,如果没有,则为NULL,如果需要1或0,这将适用于SQL Server isNullTestable.ID,00 关于性能编码的几点注意事项: 根据定义,ID列是唯一的,因此DISTINCT是冗余的,并且会导致不精确的处理,除非它是来自另一个表的ID 为什么要将其存储到临时表中,而不是直接在查询中使用它
您需要将结果查询左键连接到ID上的可诱惑项,如果有,这将为您提供ID;如果没有,则为NULL;如果需要1或0,这将适用于SQL Server isNullTestable.ID,00 关于性能编码的几点注意事项: 根据定义,ID列是唯一的,因此DISTINCT是冗余的,并且会导致不精确的处理,除非它是来自另一个表的ID 为什么要将其存储到临时表中,而不是直接在查询中使用它
如果您将join留给了诱惑,您将在ID不存在的地方得到一个NULL
SELECT ID,
ColumnA,
ColumnB,
...
T.ID IS NOT NULL AS NEWCOLUMN -- Gives 1 or 0 or True/false as a bit
FROM ... X
LEFT JOIN #TEMPTABLE T
ON T.ID = X.ID -- DEFINE how the two rows can be related unquiley
如果您将join留给了诱惑,您将在ID不存在的地方得到一个NULL
SELECT ID,
ColumnA,
ColumnB,
...
T.ID IS NOT NULL AS NEWCOLUMN -- Gives 1 or 0 or True/false as a bit
FROM ... X
LEFT JOIN #TEMPTABLE T
ON T.ID = X.ID -- DEFINE how the two rows can be related unquiley
可以使用联合和子查询
Select . . . . , 'TRUE'
From . . .
Where ID in
(Select id FROM #temptable)
UNION
SELECT . . . , 'FALSE'
FROM . . .
WHERE ID NOT in
(Select id FROM #temptable)
因此,在顶部,选择。。。从…起其中ID在子查询中,如果ID在您的表中,则进行选择
如果ID不在可诱惑列表中,则底部进行选择
UNION运算符将两个结果很好地连接起来,因为两个SELECT语句将返回相同数量的列。您可以使用UNION和子查询
Select . . . . , 'TRUE'
From . . .
Where ID in
(Select id FROM #temptable)
UNION
SELECT . . . , 'FALSE'
FROM . . .
WHERE ID NOT in
(Select id FROM #temptable)
因此,在顶部,选择。。。从…起其中ID在子查询中,如果ID在您的表中,则进行选择
如果ID不在可诱惑列表中,则底部进行选择
UNION运算符将两个结果很好地结合在一起,因为两个SELECT语句都将返回相同数量的列。若要扩展其他人对UNION的说法,请执行类似操作
SELECT id, TRUE AS myColumn FROM `table1`
UNION
SELECT id, FALSE AS myColumn FROM `table2`
要扩展别人对Union的看法,只需这样做
SELECT id, TRUE AS myColumn FROM `table1`
UNION
SELECT id, FALSE AS myColumn FROM `table2`
嘿,戴尔,我用术语说得很松散。它不是真正的ID列。此外,我还考虑直接查询并加入我已经放在临时表中的内容。我可能会转而接受你的建议。谢谢嘿,戴尔,我用术语说得很松散。它不是真正的ID列。此外,我还考虑直接查询并加入我已经放在临时表中的内容。我可能会转而接受你的建议。谢谢