Как сделать логику для поля с GROUP BY / Могу ли я использовать текстовое поле в качестве логики SQL? - PullRequest
0 голосов
/ 22 марта 2011

Я сложен здесь:

SELECT [RecTime], [Name],
   CAST(CASE WHEN 
   -- <logics>
    1=0 -- ???
    -- </logics>
   THEN 1 ELSE 0 END AS bit) AS [Value]
FROM EventIncidentsStates
GROUP BY [RecTime], [Name]

EventIncidentsStates выглядит следующим образом:

        RecTime                    SQL                Event        Name       Val
2011-03-02 08:36:10.047 | Alarm1002 AND Alarm1004 | Alarm1002 | doubleAlarm  | 1
2011-03-02 08:36:10.047 | Alarm1002 AND Alarm1004 | Alarm1004 | doubleAlarm  | 0
2011-03-02 08:36:10.047 | Alarm1002               | Alarm1002 | myalarm1002  | 1
2011-03-02 08:36:20.030 | Alarm1002 AND Alarm1004 | Alarm1002 | doubleAlarm  | 1
2011-03-02 08:36:20.030 | Alarm1002 AND Alarm1004 | Alarm1004 | doubleAlarm  | 0
2011-03-02 08:36:20.030 | Alarm1004               | Alarm1004 | TestIncident | 0
2011-03-02 08:36:40.050 | Alarm1002 AND Alarm1004 | Alarm1002 | doubleAlarm  | 0
2011-03-02 08:36:40.050 | Alarm1002 AND Alarm1004 | Alarm1004 | doubleAlarm  | 0
2011-03-02 08:36:40.050 | Alarm1004               | Alarm1004 | TestIncident | 0

Val - это значение Event, а не значение Name, значение Name, которое мне нужночтобы разобраться с логикой и группировкой SQL.

эх, дайте мне время объяснить, что это, на примере первого узла,

первое поле - RecTime, второе - Alarm1002 AND Alarm1004 это должна быть логика :), которая также может выглядеть одинаково (Alarm1002 = 1 AND Alarm1004 = 1) , не уверен, что я смогу ее использовать, doubleAlarm равно Имя , название моего сложного события с этой логикой,

даже если есть события на это время,

Alarm1002 is 1
Alarm1004 is 0

Итак [Значение] из doubleAlarm должно быть (1 И 0) = 0 ... Я знаю, что моя структура немного странная, но задача была очень сложной:)

и после того, как весь этот вопрос содержит 2 вопроса, ябыл бы рад получить ответ на любой:

  1. как использовать пользовательскую логику с GROUP BY
  2. какпарсировать поле nvarchar в логику SQL, да второй вопрос вроде головной боли

    Другой пример:

    -- Example
        SELECT [RecTime], [Name],
           CAST(CASE WHEN 
           -- <logics>
           [SQL]
           -- </logics>
           THEN 1 ELSE 0 END AS bit) AS [Value]
        FROM EventIncidentsStates
        GROUP BY [RecTime], [Name], [SQL]
    
    
    
    -- Inital data
    
    EventIncidentsStates -
    
    [RecTime]         [SQL]                [EventName] [Value] [Name]
    SomeDate (EVENT1 = 1 AND EVENT2 = 1)     EVENT1       1      Some
    SomeDate (EVENT1 = 1 AND EVENT2 = 1)     EVENT2       0      Some
    
    -- Out data
    
    SomeDate Some 0
    

1 Ответ

2 голосов
/ 22 марта 2011

Отвечая на первый вопрос

Используйте Дело .. когда Я решу вашу проблему

USE AdventureWorks2008R2;
GO
SELECT JobTitle, MAX(ph1.Rate)AS MaximumRate
FROM HumanResources.Employee AS e
JOIN HumanResources.EmployeePayHistory AS ph1 ON e.BusinessEntityID = ph1.BusinessEntityID
GROUP BY JobTitle
HAVING (MAX(CASE WHEN Gender = 'M' 
        THEN ph1.Rate 
        ELSE NULL END) > 40.00
     OR MAX(CASE WHEN Gender  = 'F' 
        THEN ph1.Rate  
        ELSE NULL END) > 42.00)
ORDER BY MaximumRate DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...