使用Select语句作为别名

时间:2015-08-28 03:06:07

标签: sql-server

我的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

希望有人遇到过这样的问题。

谢谢。

3 个答案:

答案 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