2013-04-10 3 views
1

Мне нужно получить несколько столбцов с различным состоянием из другой таблицы. Что я есть, как показано нижеSQL Query: Получить столбцы с различным условием

SELECT 
(SELECT COUNT(*) FROM Table1 WHERE Price >= 0 Price < 10) AS 'Group1', 
(SELECT COUNT(*) FROM Table1 WHERE Price >= 10 AND Price < 20) AS 'Group2', 
(SELECT COUNT(*) FROM Table1 WHERE Price >= 20 AND Price < 30) AS 'Group3', 
(SELECT COUNT(*) FROM Table2 WHERE Price >= 0 Price < 10) AS 'Group4', 
(SELECT COUNT(*) FROM Table2 WHERE Price >= 10 AND Price < 20) AS 'Group5', 
(SELECT COUNT(*) FROM Table2 WHERE Price >= 20 AND Price < 30) AS 'Group6' 

Просто удивительно, есть ли лучший способ реструктурировать лучший запрос для выше условия?

ответ

4

Существует,

SELECT SUM(CASE WHEN Price >= 0 Price < 10 THEN 1 END) AS 'Group1', 
     SUM(CASE WHEN Price >= 10 AND Price < 20 THEN 1 END) AS 'Group2', 
     SUM(CASE WHEN Price >= 20 AND Price < 30 THEN 1 END) AS 'Group3', 
     SUM(CASE WHEN Price >= 0 Price < 10 THEN 1 END) AS 'Group4', 
     SUM(CASE WHEN Price >= 10 AND Price < 20 THEN 1 END) AS 'Group5', 
     SUM(CASE WHEN Price >= 20 AND Price < 30 THEN 1 END) AS 'Group6' 
FROM table2 
+0

Почему это лучше, чем разница? Также в этом вопросе есть 2 таблицы. – Alex

+0

@Alexey он будет проходить только один раз, а не вызывать 6 'SELECT' statement –

+0

@J W Но он не будет делать полного сканирования из-за ограничений по цене. Так что все вместе выглядит одинаково. – Alex

2

Суммируя table1 к вышеупомянутому замечательный запрос на J W.

SELECT SUM(CASE WHEN T1.Price >= 0 Price < 10 THEN 1 END) AS 'Group1', 
     SUM(CASE WHEN T1.Price >= 10 AND Price < 20 THEN 1 END) AS 'Group2', 
     SUM(CASE WHEN T1.Price >= 20 AND Price < 30 THEN 1 END) AS 'Group3', 
     SUM(CASE WHEN T2.Price >= 0 Price < 10 THEN 1 END) AS 'Group4', 
     SUM(CASE WHEN T2.Price >= 10 AND Price < 20 THEN 1 END) AS 'Group5', 
     SUM(CASE WHEN T2.Price >= 20 AND Price < 30 THEN 1 END) AS 'Group6' 
FROM table1 T1, table2 T2 
+0

Удивительный. Благодарю. – My2ndLovE

+0

Удовольствие ...... – user2135380

Смежные вопросы