我的mssql代码有问题。我在这里有我计算的行数和结果有自己的指定结果。我的问题是我必须使别名成为一个select语句,以便使该列日名称,而不是使其硬编码。
以下是计算结果的代码..
SELECT count(*) MONDAY
,CASE
WHEN count(*) > 4
THEN 1
WHEN count(*) < 5
THEN 0
END AS HIT_RARE
FROM
Tbl where msg like '%GGXX%' and date = '08/26/2015'
这就是我需要放置的替代星期一的别名,它实际上是硬编码的。
SELECT case when DATEPART(DW, GETDATE()) = 1 THEN 'Sunday' ELSE
case when DATEPART(DW, GETDATE()) = 2 THEN 'Monday' ELSE
case when DATEPART(DW, GETDATE()) = 3 THEN 'Tuesday' ELSE
case when DATEPART(DW, GETDATE()) = 4 THEN 'Wednesday' ELSE
case when DATEPART(DW, GETDATE()) = 5 THEN 'Thursday' ELSE
case when DATEPART(DW, GETDATE()) = 6 THEN 'Friday' ELSE
case when DATEPART(DW, GETDATE()) = 7 THEN 'Saturday'
END
希望有人遇到过这样的问题。
谢谢。
答案 0 :(得分:1)
您可以将结果存储在临时表中,并使用[sp_rename]重命名:
<强> SqlFiddleDemo 强>
Form1 fm = new Form1();
string abc = fm.VAR;
但仍然无法想象它在现实生活中的用法,因为 COLUMN不可变!!!
答案 1 :(得分:0)
您可以使用动态sql:
DECLARE @sql NVARCHAR(MAX)
SET @sql =
'SELECT
count(*) AS ' + QUOTENAME(DATENAME(dw, GETDATE())) + '
,CASE
WHEN count(*) > 4 THEN 1
WHEN count(*) < 5 THEN 0
END AS HIT_RARE
FROM Tbl
WHERE
msg like @msg
AND date = @date'
PRINT @sql
EXEC sp_executesql @sql, N'@msg VARCHAR(100), @date DATE', '%GGXX%', '20150826';
答案 2 :(得分:0)
您可以尝试使用pivot,但仍需要某种硬代码,请参阅下面的示例:
PRINT 'try pivot';
WITH t AS ( SELECT SomeCriteria,
DATENAME(WEEKDAY, SomeDate) WkDayName
FROM YourTable
)
SELECT *
FROM t PIVOT
( COUNT(SomeCriteria) FOR WkDayName IN ( [Monday], [Tuesday], [Wednesday], [Thursday],[Friday], [Saturday], [Sunday] ) ) AS p;
如果你想摆脱查询中的工作日名称,那么你可能不得不使用动态SQL