powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите с запросом с двумя select
24 сообщений из 74, страница 3 из 3
Помогите с запросом с двумя select
    #39166832
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в таблицу заносится результат вычислений. Берется фиксированная цена из таблицы № 1. И в таблицу номер два заносится уже произведение цены на количество. Соответсвенно, если кол-во ноль, то и в таблицу заносится ноль. Плюс там различные скидки и проч, соответсвенно все цены расходятся с базовой. Хочу увидеть усредненную
По поводу таблички - Чет про запятые не дочитал. Первые разы с планшета писал - довольно ущербная штуковина. Видимо как то криво всплывающая подсказка вылезла
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39167651
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro...
Можно использовать проверку на null, можно использовать оператор ??, можно использовать тип decimal? вместо decimal...
Мне безумно стыдно, но чет не доводилось до сих пор сталкиваться.
Как ими пользоваться то?
decimal? dc1;
dc1 =db.table[0].expr;
Ошибку выдает. Или надо GetValueOrDefault использовать?
С двойным ? вообще не пойму
decimal? dc1 = null;
deciamal dc2 = dc1 ?? db.table[0].expr;
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39167678
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdm114decimal? dc1;
dc1 =db.table[0].expr;
Ошибку выдает.текст ошибки надо угадать?
mdm114С двойным ? вообще не пойму
decimal? dc1 = null;
deciamal dc2 = dc1 ?? db.table[0].expr;непонятно, что не понятно. ?? позволяет заменить null на корректное значение, к примеру
Код: c#
1.
2.
decimal? dc1 = null;
decimal dc2 = (decimal)(dc1 ?? 0M);
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39167846
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Promdm114decimal? dc1;
dc1 =db.table[0].expr;
Ошибку выдает.текст ошибки надо угадать?

Дык ругается, что значение для столбца expr равно DBNULL
Shocker.Promdm114С двойным ? вообще не пойму
decimal? dc1 = null;
deciamal dc2 = dc1 ?? db.table[0].expr;непонятно, что не понятно. ?? позволяет заменить null на корректное значение, к примеру
Код: c#
1.
2.
decimal? dc1 = null;
decimal dc2 = (decimal)(dc1 ?? 0M);


Я понял что меняет. Я думал что возможна сразу конструкция, которая вытягивает значение из db.table[0].expr и, в случае если оно DBNULL меняет на 0
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39168110
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdm114Дык ругается, что значение для столбца expr равно DBNULLну так dbnull и null не совсем одно и то же )
mdm114вытягивает значение из db.table[0].expr и, в случае если оно DBNULL меняет на 0ну так для этого есть тернарный оператор, либо можно сделать свой метод расширения для удобства
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39168349
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, еще почитаю по этому поводу дополнительно и буду пробовать
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39170158
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде бы на ровном месте произошла еще одна странность
Есть три таблицы
1. Описание товара - tbl1
2. Складские остатки - tbl_sklad
3. Продажи - tbl_sale

Нужны суммы продаж и складских остатков

1.Складские остатки
Код: sql
1.
2.
3.
4.
5.
SELECT tbl1.Id
,SUM(tbl_sklad.длина) AS На складе
FROM tbl1
LEFT JOIN tbl_sklad ON tbl1.id =tbl_sklad.pId
GROUP BY tbl1.Id


выводит
№уч карточки На складе482 214.16483 344.56493 208.76
тут суммы правильные

2. Сумма продаж
Код: sql
1.
2.
3.
4.
5.
SELECT tbl1.Id
,SUM(tbl_sale.длина) AS Продано
FROM tbl1
LEFT JOIN tbl_sale ON tbl1.id =tbl_sale.pId
GROUP BY tbl1.Id


№ уч карточки Продажи482 NULL483 30493 18.10
тут тоже все суммы сходятся

Далее пытаюсь

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT tbl1.Id
,SUM(tbl_sklad.длина) AS На складе
,SUM(tbl_sale.длина)  AS Продано
FROM tbl1
LEFT JOIN tbl_sklad ON tbl1.id =tbl_sklad.pId
LEFT JOIN tbl_sale  ON tbl1.id =tbl_sale.pId
GROUP BY tbl1.Id



выводится какая то хрень. Че тут насуммировалось, непонятно..

№уч карточки На складе Продано482 214.16 NULL483 689.12 960.00493 417.52 380.10
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39170246
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mdm114выводится какая то хреньЧтобы понять, почему хрень, посмотри результаты запроса без группировки:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT tbl1.Id
,tbl_sklad.длина AS На складе
,tbl_sale.длина  AS Продано
FROM tbl1
LEFT JOIN tbl_sklad ON tbl1.id =tbl_sklad.pId
LEFT JOIN tbl_sale  ON tbl1.id =tbl_sale.pId

и сразу станет понятно
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39170280
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сообщение 8120, уровень 16, состояние 1, строка 1
Column 'tbl1.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39170285
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так не надо использовать агрегирующие функции, просто посмотри результат запроса без группировки
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39170410
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я мож не допонял что-то, но первые два запроса с агрегирующими функциями и без них выдают один и тот же результат. Причем он правильный. Там в продажах у 493-й учетной карточки числятся два значения 9.20 и 8.90. Я уж и ограничения делал WHERE id= 493. Результат одинаковый
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39170439
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз. Забей на первый два запроса, они правильные и работают как надо.
Ты не не понял, почему в третьем случае (когда ты присоединяешь сразу две таблицы), ты получаешь не те итоговые данные, которые ты ожидаешь.

Чтобы понять - почему так, я предлагаю тебе выполнить не суммирующий не группирующий запрос (который я привел). Ты сразу увидишь и поймешь, в чем твоя ошибка. Думаю, что все, кто начинал работать с SQL через этот момент проходили.
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39170998
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так а что он должен вывести? В первой таблице 10 записей. Во второй две. Выводится хрень полная. Я так понимаю, что придется на два отдельных запроса разбить
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39171289
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выводится не хрень полная, а перемножение двух присоединенных таблиц, то есть все возможные их сочетания. Таким образом, данные для суммирования задваиваются, затраиваются и т.п., соответственно, получается неверная сумма.

Решение может быть таким:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT tbl1.Id
,SKL.Sm AS 'На складе'
,SAL.Sm AS Продано
FROM tbl1
LEFT JOIN (SELECT pId, SUM(длина) AS Sm FROM tbl_sklad GROUP BY pID) SKL ON tbl1.Id=SKL.pId
LEFT JOIN (SELECT pId, SUM(длина) As Sm FROM tbl_sale GROUP BY pID) SAL ON tbl1.Id=SAL.pId

но, как говорилось выше, не всегда стоит увлекаться слишком навороченными подзапросами
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39171532
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
даа, чет мне такая подвыборка в голову не пришла. Спасибо
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39181921
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
можно еще один вопрос?

есть
Код: sql
1.
2.
3.
4.
5.
6.
SELECT posId, [st] ,dateOut
,SUM(dl) AS Sumdl
,SUM.... AS tnMetr 
,SUM.... AS tnTotal 
FROM tbl1...
GROUP BY ....st,posId,  dateOut



вывод:
№ st dateOutSumdltnMetrtnTotal54 8.00 2015-12-01 10:29:58.303 1.00 77.3337 77.333754 8.00 2015-12-01 10:29:59.067 1.00 77.3337 77.333754 8.00 2015-12-01 10:29:59.817 1.00 77.3337 77.333754 8.00 2015-12-01 10:30:00.627 1.00 77.3337 77.333754 8.00 2015-12-01 10:30:01.563 1.00 77.3337 77.333754 8.00 2015-12-01 10:30:02.320 1.00 77.3337 77.3337

Группировка по дате отсутствует, так как(насколько я правильно понял) разное время. Это как то можно обойти в запросе? Чтобы как то игнорировалось время, а dateOut воспринималась как ShortDate штоле..
т.е. нужно
№ st dateOutSumdltnMetrtnTotal54 8.00 2015-12-01 6 77.3337 77.3337*6
Или опять же проблема в изначально неправильном подходе к занесению даты в таблицу?
При занесении значение берется из DateTimePicker.Value...
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39182072
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, конечно, группировать и выводить округленную дату, но это плохое решение, так как сортировка/группировка/отбор по выражению исключает использование индексов. Лучше, если время не требуется в базе, не писать его туда.
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39182074
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
SELECT posId, [st] ,cast(dateOut as date) as dateOut
...
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39182453
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за советы
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39183237
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
стал пробовать ругается.

Type date is not a defined system type.

В нете смотрел синтаксис. Вроде такой же как в Вашем примере.
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39183266
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка MS SQL или .Net ? версия MS SQL какая?
У меня работает из MSSQL 2012 Management Studio
Код: sql
1.
2.
3.
4.
select nPostId, cast(tDate as date) as tDate, sum(nSum) as nSum
	from MyTable
	where year(tDate) = 2016
	group by nPostId, tDate


Если старый MSSQL (тип date в 2008 вроде появился), то надо использовать datediff() или dateadd() (точно не помню). Тогда тип останется datetime
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39183287
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот по-старому
Код: sql
1.
select nPostId, DATEADD(day, DATEDIFF(day, 0, tDate), 0) as tDate, sum(nSum) as nSum


Взято тут 15115537
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39183745
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
Пробовал в Managment Studio. 2008. Попробую попозже в проекте. Не думал, что разница есть..
Спасибо, отпишусь
...
Рейтинг: 0 / 0
Помогите с запросом с двумя select
    #39185549
mdm114
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, проблема именно в этом. База была на 2000, перенес на 2012, все заработало без проблем
...
Рейтинг: 0 / 0
24 сообщений из 74, страница 3 из 3
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите с запросом с двумя select
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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