Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Result set, scalar value, Ben-Gan, Alias AS  [new]
StreamCX
Member

Откуда:
Сообщений: 43
1:
SELECT MIN(col1) AS start_range, MAX(col1) AS end_range 
FROM (SELECT col1, 
        (
        SELECT MIN(B.col1) 
         FROM dbo.T1 AS B 
         WHERE B.col1 >= A.col1 
           AND NOT EXISTS 
             (SELECT * 
              FROM dbo.T1 AS C 
              WHERE C.col1 = B.col1 + 1)
        ) AS grp
      FROM dbo.T1 AS A) AS jh 
GROUP BY grp;

2:
SELECT col1, 
  (SELECT MIN(B.col1) 
    FROM dbo.T1 AS B 
    WHERE B.col1 >= A.col1 
      -- is this row the last in its group? 
      AND NOT EXISTS 
        (SELECT * 
         FROM dbo.T1 AS C 
         WHERE C.col1 = B.col1 + 1))  FROM dbo.T1 AS A;

3:
SELECT MIN(col1) AS start_range, MAX(col1) AS end_range 
FROM (SELECT col1,  
        -- the difference is constant and unique per island 
        col1 - ROW_NUMBER() OVER(ORDER BY col1) AS grp 
      FROM dbo.T1) AS D 

GROUP BY grp;


4:
SELECT col1, col1 - ROW_NUMBER() OVER(ORDER BY col1) AS diff 
FROM dbo.T1; 


В первом коде inline select и alias нужен. Почему это inline select?
Также я не могу понять, почему в первом и третьем коде возвращается result set? А во втором коде возврат scalar calue?
Изначально был вопрос нужности алиаса"AS", ответ получил, но не могу понять, как тут отличить result set от scalar value.
Почему во втором и четвертом коде якобы не result set и соответственно "AS jh" не нужны?

Сообщение было отредактировано: 13 июн 13, 11:29
12 июн 13, 18:11    [14425071]     Ответить | Цитировать Сообщить модератору
 Re: Result set, scalar value, Ben-Gan, Alias AS  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
SELECT (SELECT 1 AS A, 2 AS B)
Странно что это не работает да?
А вот это блин, работает:
SELECT * FROM (SELECT 1 AS A, 2 AS B) AS X
Засада?

Меня вообще удивляло в других скулях, как это объект в блоке SELECT может вернуть несколько колонок.
12 июн 13, 18:24    [14425092]     Ответить | Цитировать Сообщить модератору
 Re: Result set, scalar value, Ben-Gan, Alias AS  [new]
StreamCX
Member

Откуда:
Сообщений: 43
Mnior
SELECT (SELECT 1 AS A, 2 AS B)
Странно что это не работает да?
.

Ничего странного. А если объяснить не только примерами, где есть логика, а ссылки дать на теорию или на SQL?
Но в любом случае спасибо.
Вопрос был поставлен больше так: странно, что это работает.
SELECT 1 AS A, 2 AS B;

P.S. Здесь тоже ничего странного, нужно мне больше разбираться, хотя бы на примерах и делать выводы, но лучше знать SQL, а не догадываться.
13 июн 13, 06:14    [14426085]     Ответить | Цитировать Сообщить модератору
 Re: Result set, scalar value, Ben-Gan, Alias AS  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
[quote StreamCX]Вопрос был поставлен больше так: странно, что это работает.
SELECT 1 AS A, 2 AS B;
FROM dual напрашивается, да?
13 июн 13, 09:44    [14426412]     Ответить | Цитировать Сообщить модератору
 Re: Result set, scalar value, Ben-Gan, Alias AS  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
StreamCX
..., а не догадываться.
Ну, мне импонирует такой подход. Развитая догадывалка ставит вас на 10 голов выше остальных.

StreamCX
Mnior
SELECT (SELECT 1 AS A, 2 AS B)
Странно что это не работает да?
Ничего странного. А если объяснить не только примерами
C развитой догадывалкой всё очевидно.
Структурная целостность. Чёрный ящик не влияет на структуру системы его использующую. Повсеместное свойство.
Но я согласен, грань тонкая и для многих бессознательная.

FROM Dual - это никому не нужная педантичность. От этого структурные правила не меняются, в отличие от верхнего допущения.
Даже так:
FROM Dual LEFT JOIN
особого смысла нет, т.к. строка/кортеж без колонок бессмысленна, ведь какие-то данные подразумеваются в этом Dual (размазанные в SELECT-е), поэтому лучше явно:
FROM (SELECT ..., X AS ColX) LEFT JOIN
И VALUES намного логичнее и однообразнее выглядит.

Так что Dual запретить, оракакл закрыть, а исходники скуля передать в опенсорс.
13 июн 13, 11:18    [14426977]     Ответить | Цитировать Сообщить модератору
 Re: Result set, scalar value, Ben-Gan, Alias AS  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Mnior
Так что Dual запретить, оракакл закрыть, а исходники скуля передать в опенсорс.
Однако, к несчастью, прописали в стандарт ISO обязательность FROM в SELECTе...
Если MS будет маниакально стремиться всё причесать под стандарт, очень боюсь, что будет только хуже
13 июн 13, 11:28    [14427055]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить