loading..
Русский    English
17:46
листать

CROSS APPLY / OUTER APPLY стр. 3

В заключение давайте рассмотрим пример задачи, которая часто встречается на практике, а именно, задачи расположения в столбец значений из строки таблицы. Для конкретизации сформулируем задачу таким образом.

Для таблицы Laptop представить информацию о продуктах в три столбца: code, название характеристики (speed, ram, hd или screen), значение характеристики.

Метод решения состоит в использовании конструктора таблицы, куда с помощью CROSS APPLY будут передаваться значения столбцов. Давайте разберем этот метод подробно.

Конструктор таблицы может использоваться не только в операторе INSERT, но и для задания таблицы в предложении FROM,  например,

Консоль
Выполнить
  1. SELECT name, value
  2. FROM (
  3. VALUES('speed', 1)
  4. ,('ram', 1)
  5. ,('hd', 1)
  6. ,('screen', 1)
  7. ) Spec(name, value);

Эта таблица у нас называется Spec и содержит два столбца - name (символьные строки) и value (числа).

Давайте теперь включим эту таблицу в оператор CROSS APPLY, который будет соединять каждую строку из таблицы Laptop с четырьмя строками из сгенерированной таблицы:

Консоль
Выполнить
  1. SELECT code, name, value
  2. FROM Laptop
  3. CROSS APPLY (
  4. VALUES('speed', 1)
  5. ,('ram', 1)
  6. ,('hd', 1)
  7. ,('screen', 1)
  8. ) Spec(name, value)
  9. WHERE code < 4 -- для уменьшения размера выборки
  10. ;

Собственно, нам осталось воспользоваться основным свойством оператора CROSS APPLY - коррелированностью табличного выражения - и заменить единички в столбце value на имена столбцов из соединяемой таблицы:

Консоль
Выполнить
  1. SELECT code, name, value FROM Laptop
  2. CROSS APPLY
  3. (VALUES('speed', speed)
  4. ,('ram', ram)
  5. ,('hd', hd)
  6. ,('screen', screen)
  7. ) spec(name, value)
  8. WHERE code < 4 -- для уменьшения размера выборки
  9. ORDER BY code, name, value;

Рекомендуемые упражнения: 97, 117, 132145

Страницы: 1 2 3 4
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
несколько дней назад
продать bitcoin . ремонт ноутбука
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.