2013-07-26 29 views
0

我有一个表有很多列,我只需要选择其中的一些取决于那里的价值。我该如何编写这样的SELECT。动态列选择取决于它的值

例如:只有拥有其所有行的总和SELECT列的值< 10和那些> = 10选择的...

+0

你能提供表模式和一些数据,你尝试过什么.. !!! –

回答

0
SELECT SUM(column1), SUM(column2), SUM(column3) 
INTO #temptable 
FROM TableName 
GROUP BY column1, column2, column3 

SELECT column1 
FROM #temptable 
WHERE column1 < 10 

SELECT column1 
FROM #temptable 
WHERE column1 >= 10 

这是你在努力完成什么?

+1

我觉得你不是很想我 – Alexander

+0

我需要根据一些条件从表中选择可变数量的列!所以每次我执行这个选择我得到不同数量的列! – Alexander

+0

你需要在你的问题中包含wayyyy更多的信息 – tkendrick20

0

也许是这样的?

Select Name 
FROM TableName.Columns 
WHERE 
    SELECT SUM(*) AS subtotal 
    FROM Name 
    WHERE subtotal >=10 
0

如果你想创建动态的sql f.e.你可以使用一个程序sp_executesql

因此,你必须建立你的选择作为字符串/ varchar,并用您的选择字符串和输入/输出参数调用sp_executesql。

这是用于ms sql服务器。还有oracle和其他数据库的程序。

DECLARE @SQLString nvarchar(500); /* dynamic sql string */ 
DECLARE @customer_id int; /* input variable */ 
DECLARE @name varchar(30); /* output variable */ 
DECLARE @ParmDefinition nvarchar(500); /* connection for binding variables */ 


SET @customer_id= 197; 

/* Add your condition here to build different select strings */ 
SET @SQLString = N'SELECT @name_out = name 
    FROM customers 
    WHERE cusomersid = @custid_in'; 

SET @ParmDefinition = N'@custid_in tinyint, @name_out varchar(30) OUTPUT'; 

EXECUTE sp_executesql @SQLString, @ParmDefinition, @custid_in = @customer_id, @name_out = @name OUTPUT; 
SELECT @name; 

http://data.stackexchange.com/stackoverflow/revision/126004/154483/dynamic-sql