-
Дана таблица t с произвольным количеством целочисленных столбцов, т.е. в запросе нельзя обращаться к конкретному столбцу Необходимо написать запрос, возвращающий все столбцы таблицы, и столбец, содержащий сумму значений всех столбцов для строки. Результат должен быть в таком виде: |c1 |c2 |c3 |Total ----------------------- |1 |7 |1 |9 |1 |6 |2 |9 |3 |5 |3 |11 |4 |4 |4 |12 |1 |7 |1 |9 |6 |2 |6 |14 |7 |1 |7 |15
======================
Такой вариант отпадает SELECT *, c1+c2+c3 Total FROM t
Использовать можно только SELECT или WITH
-
? SELECT * FROM INFORMATION_SCHEMA.Columns where TABLE_NAME =
-
Ну данный запрос извлечет наименования всех столбцов указанной таблицы. А как их вывести? и суммировать?
-
А для чего такое надо? Это к тому что незнать про колонки - еще надо постататься...
-
Ну вот такое задание дали
-
Ну данный запрос извлечет наименования всех столбцов указанной таблицы.
что позволит на лету написать нужный селект.
-
Сделал такой запрос: SELECT TABLE_NAME,
(SELECT COLUMN_NAME + '+'
FROM INFORMATION_SCHEMA.Columns t2 WHERE t1.TABLE_NAME = t2.TABLE_NAME FOR xml path('')) summa
FROM INFORMATION_SCHEMA.Columns t1
WHERE TABLE_NAME='t'
GROUP BY TABLE_NAME Вернул такой результат: |TABLE_NAME |summa ----------------------- |t |c1+c2+c3+ А как теперь сформировать такой запрос типа SELECT *, @summa FROM t Чтобы за место @summa подставилось значение поля summa без последнего плюса?
-
SET @T = 'AAA' SET @S = 'SELECT *, ' SELECT @S = @S + COLUMN_NAME + '+' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @T SET @S = SUBSTRING(@S, 0, Len(@S)) + ' as Total from ' + @T SELECT @S
-
тогда уж DECLARE @SUMMA NVARCHAR(MAX)
SELECT @SUMMA = COALESCE(@SUMMA + '+', '') + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @T
SELECT @SUMMA
-
Спасибо большое O'ShinW, turbouser Решил следующим образом. DECLARE @total nvarchar(MAX)
SELECT @total = COALESCE(@total + '+', '') + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 't'
EXEC('SELECT *, ' + @total + ' Total FROM t') Хотя в задаче сказано, решить нужно одним запросом и начинаться он должен либо с SELECT, либо с WITH. Динамические запросы тоже нельзя использовать. Но я незнаю, реально ли сделать такое без динамического запроса. Как думаете реально?
-
> решить нужно одним запросом и начинаться он должен либо > с SELECT
Да запросто :)
select * from OPENQUERY(,'
-
А если серьёзно - не знаю. Откуда задание такое, вообще?
-
Перед собеседованием дали 6 задач на составление запросов MS SQL. Все задачи нужно решить одним запросом, не динамическим. 5 задач сделал, правда не все конечно одним запросом. Задания прям как на олимпиаду, довольно сложные. И эту задачу получается тоже не одним запросом решил. Ну посмотрим что скажут. Вообще непойму смысла в том, зачем все решать одним SELECT'ом. Может там нужно знать тонкости языка, чтобы решить их одним запросом, но что-то я сомневаюсь.
-
я то же сомневаюсь
А формально OpenQuery больше по заданию будет. Зарос один :)
select * from OPENQUERY( САМ_ЭТОТ_СЕРВЕР, ' declare @A int; Set @A = 6; Select @A as Q ') T join (select 6 as W, '232323' as У) T2 on T.Q = T2.W
-
-
> Е556 (08.02.13 13:13) [14]
Мартин Грубер, Том кайт, Кристофер Дейт (К. Дж. Дейт)
-
>Михаил (06.02.13 18:41) поиск по xml, xquery.
|