如何使用列名与SQL中的参数进行比较?

use*_*364 1 sql sql-server-2008

我在这里想要实现的是传递一周中的参数,该参数保存当前日期的值(星期三等),并将其与列名进行比较,以确定在where子句中使用哪一列.

所以在星期日 - 星期六采取列.在where子句中,我想将这些列名称与我传入的参数进行比较,并仅返回匹配的值.

下面的表格称为DayTable

Sunday  Monday  Tuesday Wednesday Thursday Friday Saturday
   1       1        1       1       1       1       0
   1       1        1       1       1       1       1


SELECT *
FROM   DayTable
WHERE  ColumnName = @DayOfWeek
Run Code Online (Sandbox Code Playgroud)

如果可能的话,这就是我想要实现的目标.我在看,ColumnProperty但我认为这不是我需要的.

Tar*_*ryn 5

由于您的数据未规范化,您可以使用该UNPIVOT函数将数据放入行中,以便于查询:

select col, value
from DayTable
unpivot
(
  value
  for col in ([Sunday], [Monday], [Tuesday], [Wednesday], 
              [Thursday], [Friday], [Saturday])
) unpiv
where col = @DayOfWeek
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo.

您的问题的最佳解决方案是将表重新设计为以下内容:

create table DayTable
(
   DayName varchar(20),
   Value int
);
Run Code Online (Sandbox Code Playgroud)