Как написать несколько запросов в одном запросе на основе условия в SQL Server? - PullRequest
0 голосов
/ 26 мая 2019
SELECT 
    [LNMAJORTP], [MainType],
    SUM(x + y - z) [x]
FROM 
    [my_table]  
WHERE 
    state LIKE '%firstCondition%'
GROUP BY
    [LNMAJORTP], [MainType] 

SELECT 
    [LNMAJORTP], [MainType],
    SUM(x + y - z) [y]
FROM 
    [my_table]  
WHERE 
    state LIKE '%secondCondition%'
GROUP BY
    [LNMAJORTP], [MainType] 

SELECT 
    [LNMAJORTP], [MainType],
    SUM(x + y - z) [z]
FROM 
    [my_table]  
WHERE
    state LIKE '%thirdCondition%'
GROUP BY
    [LNMAJORTP], [MainType]

Как я могу изменить этот запрос на один запрос?

Ответы [ 3 ]

2 голосов
/ 26 мая 2019

Если вы хотите сложить выражения и получить результаты в трех разных столбцах ([x], [y] и [z]), используйте следующий подход.

SELECT 
    [LNMAJORTP],
    [MainType],
    SUM(CASE WHEN state LIKE '%firstCondition%' THEN x+y-z END) AS [x],
    SUM(CASE WHEN state LIKE '%secondCondition%' THEN x+y-z END) AS [y],
    SUM(CASE WHEN state LIKE '%thirdCondition%' THEN x+y-z END) AS [z]
FROM [my_table] 
GROUP BY [LNMAJORTP], [MainType] 

Если вы хотите сложить только одно выражение (x+y-z в вашем примере), должно подойти простое предложение OR в WHERE.Результат выражения будет в одном столбце:

SELECT 
    [LNMAJORTP],
    [MainType],
    SUM(x+y-z) AS [x_y_z]
FROM [my_table] 
WHERE state LIKE '%firstCondition%' OR state LIKE '%secondCondition%' OR state LIKE '%thirdCondition%'
GROUP BY [LNMAJORTP], [MainType] 
0 голосов
/ 26 мая 2019

Вы можете попробовать UNION ALL между каждым выбором.

SELECT 
    [LNMAJORTP], [MainType],
    SUM(x + y - z) [x]
FROM 
    [my_table]  
WHERE 
    state LIKE '%firstCondition%'
GROUP BY
    [LNMAJORTP], [MainType] 
UNION ALL
SELECT 
    [LNMAJORTP], [MainType],
    SUM(x + y - z) [y]
FROM 
    [my_table]  
WHERE 
    state LIKE '%secondCondition%'
GROUP BY
    [LNMAJORTP], [MainType] 
UNION ALL
SELECT 
    [LNMAJORTP], [MainType],
    SUM(x + y - z) [z]
FROM 
    [my_table]  
WHERE
    state LIKE '%thirdCondition%'
GROUP BY
    [LNMAJORTP], [MainType]
0 голосов
/ 26 мая 2019

Вы можете объединить три запроса следующим образом.Который будет возвращать ваши результаты в разных строках-

SELECT state,[LNMAJORTP],[MainType],
sum(x+y-z) [z]
FROM [my_table]  
where state LIKE '%thirdCondition%'
OR state LIKE '%firstCondition%'
OR state LIKE '%secondCondition%'
GROUP BY state,[LNMAJORTP],[MainType] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...