2015-08-28 7 views
0

У меня есть проблема с моими кодами mssql. То, что у меня есть, я подсчитал, что количество строк и результатов имеет свой назначенный результат. Моя проблема заключается в том, что я должен сделать псевдоним командой select, чтобы сделать это имя дня столбца, а не сделать его жестко запрограммированным.Использование инструкции Select as as alias

Вот код для подсчета результатов с ..

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' 

и это то, что мне нужно поместить в качестве псевдонима в замене на понедельник, который на самом деле HARDCODED.

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

Не могли бы вы предоставить некоторые примерные данные и ожидаемый результат. –

+0

Невозможно добавить фотографии ... но столбец 1 должен быть назван понедельником, если сегодня понедельник, а столбец 2 - скорость попадания ... im касается только того, как сделать имя столбца динамическим ..... –

+0

Использование динамический sql. –

ответ

1

Вы можете сохранить результат в временную таблицу и переименовать его с помощью [sp_rename]:

SqlFiddleDemo

DECLARE @alias_name NVARCHAR(100) = DATENAME(dw, GETDATE()); 

SELECT 
    (...) 
    ,[alias] = (...) 
INTO #temp 
FROM table_name; 

EXEC [tempdb]..[sp_rename] '#temp.alias', @alias_name, 'COLUMN'; 

SELECT * 
FROM #temp; 

Но до сих пор не могу себе представить, это использование в реальной жизни, так как COLUMN не является переменной!

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'; 
0

вы можете попробовать использовать стержень, но все еще требуют какого-то жесткого кода см ниже пример:

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