动态列根据其值进行选择

时间:2013-07-26 14:26:05

标签: sql select dynamic

我有一个包含很多列的表,我需要根据其值选择其中一些列。我怎么能写这样的SELECT。

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

4 个答案:

答案 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 :(得分:0)

从原始描述(想要根据聚合函数的结果选择数据),您很可能想要使用HAVING子句。有关详细信息,请查看http://www.w3schools.com/sql/sql_having.asp

答案 2 :(得分:0)

也许是这样的?

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

答案 3 :(得分:0)

如果你想创建动态sql f.e.在程序中,您可以使用sp_executesql

因此,您必须将select构建为字符串/ varchar,并使用您的choosetring和in / out参数调用sp_executesql。

这是针对ms sql server的。还有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