powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вложенный запрос
25 сообщений из 126, страница 1 из 6
Вложенный запрос
    #39572953
Rismen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помочь с вложенным запросом. Необходимо вывести клиентов и сумму их задолженности. Я это делаю так, но выдает ошибку "
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения."
Код: sql
1.
2.
3.
4.
SELECT c.PriceOfResidency-(SELECT Pay FROM Payment)AS "Debet", Surname
FROM Residency c, Payment b, Clients JOIN Residency ON Clients.ClientID=Residency.ClientID
					                JOIN Payment ON Residency.ResidencyID=Payment.ResidencyID
WHERE (c.PriceOfResidency!=b.Pay);
...
Рейтинг: 0 / 0
Вложенный запрос
    #39572959
xenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rismen,
Код: sql
1.
(SELECT Pay FROM Payment)


может, тут SUM(Pay)
?
...
Рейтинг: 0 / 0
Вложенный запрос
    #39572962
Rismen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xenix, нет, тогда выводит около 675 строк, а должен 3
...
Рейтинг: 0 / 0
Вложенный запрос
    #39572965
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rismen,
авторогда выводит около 675 строк, а должен 3
допишите SELECT TOP 3 иначе не спасти.

FROM Residency c, Payment b, Clients и потом опять JOIN Residency JOIN Payment

на угад как-то так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT Surname, SUM(c.PriceOfResidency)-SUM(Payment) AS [Debet]
FROM Residency c
INNER JOIN Clients
ON Clients.ClientID=c.ClientID
INNER JOIN Payment 
ON c.ResidencyID=Payment.ResidencyID
GROUP BY Surname
HAVING SUM(c.PriceOfResidency) <> SUM(b.Pay);
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573080
Rismen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,
всё равно не выводит, то что нужно. Могу скинуть саму базу данных https://drive.google.com/open?id=1TVcrxWEFqn7zERAubE7-3qoeV3eKyLwY
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573154
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKна угад как-то так

Как я понимаю, могут быть клиенты без единого платежа.
Тогда уж так:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT C.Surname, SUM(R.PriceOfResidency)-SUM(ISNULL(P.Payment,0)) AS Debt
FROM Clients C
JOIN Residency R ON C.ClientID=R.ClientID
LEFT JOIN Payment P ON R.ResidencyID=P.ResidencyID
GROUP BY Surname
HAVING ABS(SUM(R.PriceOfResidency)-SUM(ISNULL(P.Payment)))>0.005
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573352
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
WITH
R AS (
  SELECT
    [ClientID],
    [Sum] = SUM( [PriceOfResidency] )
  FROM
    Residency
  GROUP BY
    [ClientID]
),
P AS (
  SELECT
    [ClientID],
    [Sum] = SUM( [Payment] )
  FROM
    Payment
  GROUP BY
    [ClientID]
)
SELECT 
  C.[ClientID],
  C.[Surname], 
  [Debt] = ISNULL( P.[Sum], 0 ) - ISNULL( R.[Sum], 0 )
FROM 
  Clients C
  LEFT JOIN R ON (
        R.[ClientID] = C.[ClientID] )
  LEFT JOIN P ON (
        P.[ClientID] = C.[ClientID] )
WHERE
  ISNULL( R.[Sum], 0 ) > ISNULL( P.[Sum], 0 )
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573359
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамирович
Код: sql
1.
WITH


Для чего в этой задаче CTE? Две временные таблицы неявно Вы создаете - это потеря производительности. А выигрыш в чем?
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573361
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ноль пропустил. Исправлено.

Код: sql
1.
2.
3.
4.
5.
6.
SELECT C.Surname, SUM(R.PriceOfResidency)-SUM(ISNULL(P.Payment,0)) AS Debt
FROM Clients C
JOIN Residency R ON C.ClientID=R.ClientID
LEFT JOIN Payment P ON R.ResidencyID=P.ResidencyID
GROUP BY Surname
HAVING ABS(SUM(R.PriceOfResidency)-SUM(ISNULL(P.Payment,0)))>0.005
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573369
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Для чего в этой задаче CTE? Две временные таблицы неявно Вы создаете - это потеря производительности. А выигрыш в чем?
Такое ощущение, что ты из PL/SQL пришёл. или из будущего, где MS SQL научился WITH материализовывать.
ptr128Ноль пропустил. Исправлено.
2. Твой скрипт изначально некорректно считает, мелкими исправлениями ты его не улучшишь.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573451
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамировичptr128Для чего в этой задаче CTE?
MS SQL научился WITH материализовывать.[/quot]
Он от момента рождения CTE так и делал. Попробуйте прогнать CTE на большим объемом данных и понаблюдайте за Tempdb


Руслан Дамирович2. Твой скрипт изначально некорректно считает, мелкими исправлениями ты его не улучшишь.
А если не как в церкви, без догм? В чем претензии?
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573458
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Он от момента рождения CTE так и делал. Попробуйте прогнать CTE на большим объемом данных и понаблюдайте за Tempdb
Шедевральное заблуждение.
ptr128А если не как в церкви, без догм?
Не получится, я верю только в чистый и понятный код.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573481
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамировичptr128Он от момента рождения CTE так и делал. Попробуйте прогнать CTE на большим объемом данных и понаблюдайте за Tempdb
Шедевральное заблуждение.
Опять догма?
Объекты CTE, табличных переменных, вложенных запросов и т.п. размещаются в tempdb. При этом, пока хватает оперативки, вся tempdb живет в in-memory OLTP. Когда же объем данных большой, то уходим на диск.
Кстати, именно когда я обнаружил, что CTE - не более, чем "ситаксический сахар", но без возможности указания необходимых индексов для временных таблиц, я от него отказался. Уже на нескольких миллионах записей иерархии, глубиной всего в десяток уровней, разница в производительности стала заметна на глаз.

ptr128А если не как в церкви, без догм?
Не получится, я верю только в чистый и понятный код.[/quot]
Это чей код Вы называете "чистым"?
Откуда Вы вообще взяли, что в таблце Payment есть поле ClientID? У ТС таблица Payment связана только с Residency через ResidencyID.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573492
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot ptr128
Объекты CTE[/quot]
Расскажи-ка нам подробнее, что за "объекты СТЕ".
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573500
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суммы будут не верно считаться, для PriceOfResidency

Исправленная версия:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT C.Surname, SUM(Q.PriceOfResidency)-SUM(Q.Payment) AS Debt
FROM Clients C
JOIN (SELECT R.ClientID, R.PriceOfResidency, SUM(ISNULL(P.Payment,0) AS Payment
  FROM Residency R
  LEFT JOIN Payment P ON R.ResidencyID=P.ResidencyID
  GROUP BY R.ClientID, R.ResidencyID ) Q
  ON C.ClientID=Q.ClientID
GROUP BY Surname
HAVING ABS(SUM(Q.PriceOfResidency)-SUM(Q.Payment))>0.005
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573509
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileРасскажи-ка нам подробнее, что за "объекты СТЕ".
Почитайте
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573511
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

авторОбъекты CTE, табличных переменных, вложенных запросов и т.п. размещаются в tempdb. При этом, пока хватает оперативки, вся tempdb живет в in-memory OLTP. Когда же объем данных большой, то уходим на диск.
как же таких sql то терпит....
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573520
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKptr128,

авторОбъекты CTE, табличных переменных, вложенных запросов и т.п. размещаются в tempdb. При этом, пока хватает оперативки, вся tempdb живет в in-memory OLTP. Когда же объем данных большой, то уходим на диск.
как же таких sql то терпит....
Самокритично
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573521
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Объекты CTE, табличных переменных, вложенных запросов и т.п. размещаются в tempdb.Ждем ссылку на документацию. Или, хотя бы, репро.
ptr128При этом, пока хватает оперативки, вся tempdb живет в in-memory OLTPА когда in-memory OLTP еще не было?
Опять же, ждем ссылку на документацию.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573527
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,
дарагуля и де там про жизнь в оперативке?
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573529
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmА когда in-memory OLTP еще не было?
Опять же, ждем ссылку на документацию.
Когда не было - непосредственно в tempdb.
Ссылка выше.
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573530
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKptr128,
дарагуля и де там про жизнь в оперативке?
Деточка, а Вы не знали, что, пока достаточно оперативки, TempDB в ней и живет?
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573533
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128TaPaKptr128,
дарагуля и де там про жизнь в оперативке?
Деточка, а Вы не знали, что, пока достаточно оперативки, TempDB в ней и живет?
нет, а ms об этом знает? может даже пишут где?

ну и про это тоже
автортабличных переменных, вложенных запросов и т.п. размещаются в tempdb.
упоротые бараны больше всего веселят
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573542
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128CammomileРасскажи-ка нам подробнее, что за "объекты СТЕ".
Почитайте
Сам то справился ссылку свою прочитать?

авторA r e essentially disposable VIEWs
...
Рейтинг: 0 / 0
Вложенный запрос
    #39573547
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
25 сообщений из 126, страница 1 из 6
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вложенный запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]