Я смотрел на внутренние запросы sql (немного похожий на sql-эквивалент метода C# anon) и задавался вопросом, могу ли я вернуть более одного значения из запроса?
Например, вернуть количество строк в таблице как одно выходное значение, а также, как другое выходное значение, вернуть отличное количество строк?
Кроме того, как работает отличное? Основано ли это на том, может ли одно поле совпадать с другим (таким образом, классифицированным как «отличное»)?
Я использую Sql Server 2005. Будет ли потеря производительности, если я верну одно значение из одного запроса, а не два из одного запроса?
Спасибо


Вы можете ответить на свой первый вопрос следующим образом:
SELECT
COUNT(field1),
COUNT(DISTINCT field2)
FROM table
(Для первого поля вы можете сделать *, если необходимо подсчитать нулевые значения.)
Отличный означает определение слова. Это исключает повторяющиеся возвращаемые строки.
Возврат 2 значений вместо 1 будет зависеть от того, какими были значения, были ли они проиндексированы или нет, а также от других неопределенных возможных переменных.
Если вы имеете в виду подзапросы в операторе select, нет, вы можете вернуть только 1 значение. Если вам нужно более одного значения, вам придется использовать подзапрос как соединение.
Если внутренний запрос встроен в SELECT, вам может быть сложно выбрать несколько значений. Однако вместо этого часто можно использовать JOIN для подзапроса; таким образом, подзапрос может быть назван, и вы можете получить несколько результатов
SELECT a.Foo, a.Bar, x.[Count], x.[Avg]
FROM a
INNER JOIN (SELECT COUNT(1) AS [Count], AVG(something) AS [Avg]) x
ON x.Something = a.Something
Что могло бы помочь.
DISTINCT делает то, что говорит. IIRC, вы можете SELECT COUNT(DISTINCT Foo) и т. д. Для запроса отдельных данных.
Внутренние запросы в форме:
SELECT * FROM tbl WHERE fld in (SELECT fld2 FROM tbl2 WHERE tbl.fld = tbl2.fld2)
не может вернуть несколько строк. Когда вам нужно несколько строк из вторичного запроса, вам обычно нужно выполнить внутреннее соединение для другого запроса.
ряды:
SELECT count(*), count(distinct *) from table
вернет набор данных с одной строкой, содержащей два столбца. Столбец 1 - это общее количество строк в таблице. В столбце 2 учитываются только отдельные строки.
Distinct означает, что в возвращаемом наборе данных не будет дубликатов ряды. Distinct может появиться только один раз, как правило, сразу после выбора. Таким образом, такой запрос, как:
SELECT distinct a, b, c FROM table
может иметь такой результат:
a1 b1 c1
a1 b1 c2
a1 b2 c2
a1 b3 c2
Обратите внимание, что значения дублируются во всем наборе результатов, но каждая строка уникальна.
Я не уверен, что означает ваш последний вопрос. Вы должны вернуть из запроса все данные, относящиеся к запросу. Что касается более быстрого, только сравнительный анализ может сказать вам, какой подход быстрее.
вы можете вернуть несколько результатов тремя способами (из моей головы)
Различный, фильтрует результирующие строки, чтобы они были уникальными.