SQL选择使用多列多个变量,其中

问题描述:

我有一个简单的表如下SQL选择使用多列多个变量,其中

CREATE TABLE [accounting].[ExtractControl](
    [SourceSchema] [varchar](50) NOT NULL, 
    [SourceTable] [varchar](150) NOT NULL, 
    [SourceDatabase] [varchar](50) NOT NULL) 

我想选择使用SourceSchemasourceTable会

目前我SourceDatabase按如下方式进行多项查询:

Select @s1 = SourceDatabase from accounting.ExtractControl where SourceSchema = 'xxx' and SourceTable = 'xxx' 
Select @s2 = SourceDatabase from accounting.ExtractControl where SourceSchema = 'yyy' and SourceTable = 'yyy' 
Select @s3 = SourceDatabase from accounting.ExtractControl where SourceSchema = 'xxx' and SourceTable = 'yyy' 

我确实认为这可以用更优雅的方式来完成!谢谢您的帮助!

+1

你觉得没有用你目前的解决方案来优雅吗? –

+0

@DanielHilgarth我在查询数据库3次返回3个变量,我想也许它可能返回所有3变量使用1查询对Db。 – dopplesoldner

你是否在问这样的事情?

select SourceDatabase from accounting.ExtractControl 
where SourceSchema in ('xxx', 'yyy') and SourceTable in ('xxx', 'yyy'); 

这将返回SourceDatabase其中SourceSchema要么是 'XXX' 或 'YYY' 和SourceTable要么是 'XXX' 或 'YYY'。

+0

嗨丹尼尔 它确实会返回SourceDatabase,但我希望它们存储在不同的变量,取决于SourceSchema和SourceTable 例如,当SourceSchema和SourceTable都是'xxx'时,s1应该是'xxx' s2 - >当两者都是'yyy'时......等等 – dopplesoldner

+0

如果您确实需要三个不同的变量,请使用您当前的解决方案。 –

+0

@dopplesoldner:同意丹尼尔:如果你想要三个不同的变量的三个结果,保持你目前的解决方案。然而,如果你更详细地说明你将如何使用这些变量,它可能会导致更好的方法(或者它可能不会)。 –

select * from accounting.ExtractControl 
where SourceSchema = 'xxx' or SourceSchema = 'yyy' 
+0

嗨Mert 我希望他们被存储在不同的变量取决于SourceSchema和SourceTable 例如, s1应该是当SourceSchema和SourceTable都是'xxx's2 - >两者都是'yyy'时......等等 – dopplesoldner

+0

我不认为有更好的办法。你可以在你的代码中选择像这样和linq。 – Mert

一个查询

SELECT @s1 = MAX(CASE WHEN SourceSchema = 'xxx' and SourceTable = 'xxx' THEN SourceDatabase END), 
     @s2 = MAX(CASE WHEN SourceSchema = 'yyy' and SourceTable = 'yyy' THEN SourceDatabase END), 
     @s3 = MAX(CASE WHEN SourceSchema = 'xxx' and SourceTable = 'yyy' THEN SourceDatabase END) 
FROM accounting.ExtractControl 

演示上SQL Fiddle

怎么样这个查询...选项

select SourceDatabase 
from accounting.ExtractControl 
where SourceSchema in ('xxx', 'yyy') 
     and SourceTable in ('xxx', 'yyy') 
     and SourceTable = SourceSchema 

我没有试过,但我认为这是什么你需要

+0

如果你想要每个单元格的值不同varriable然后用光标现在 –