Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.01;
Скачать: CL | DM;

Вниз

Сортировка приводит к изменению количества записей, почему?   Найти похожие ветки 

 
Kolan ©   (2008-05-06 11:21) [0]

Здравствуйте,
 Есть вот такой запрос:

SELECT Devices.PartNumber, ParamsDictionary.ParamName, ISNULL(Params.ParamValue, 0) AS ParamValue
FROM Params, Measurments, Devices, ParamsDictionary
WHERE (1=1)
 AND (Params.MeasurmentID = Measurments.MeasurmentID)
 AND (Measurments.DeviceID = Devices.DeviceID)
 AND (Params.ParamID = ParamsDictionary.ParamID)


Он возвращает 565 записей.
1 Rd                   10.0
1 Ld                   20.0
1 Cd                   33.0
1 Cs                   0.0
1 Ke                   0.0
1 Qm                   0.0
1 Ct                   0.0
1 Tg                   0.0
1 Mq                   0.0
1 Mxx                  33.0
1 RealResX             40.0
1 RealResY             50.0
1 Rd                   3647.7981949631298
1 Ld                   4.43077772442183
1 Cd                   2.71909446089571E-9
1 Cs                   5.3647565251156097E-8
1 Ke                   0.21560693096653899


Eсли теперь добавить ORDER BY,
SELECT Devices.PartNumber, ParamsDictionary.ParamName, ISNULL(Params.ParamValue, 0) AS ParamValue
FROM Params, Measurments, Devices, ParamsDictionary
WHERE (1=1)
 AND (Params.MeasurmentID = Measurments.MeasurmentID)
 AND (Measurments.DeviceID = Devices.DeviceID)
 AND (Params.ParamID = ParamsDictionary.ParamID)
ORDER BY
 ParamsDictionary.ParamName


то происходит странное, саписей возвращается всего 29:

1 AResX 1237.0
1 AResX 1058.0
1 AResX 1422.0
1 AResX 1241.0
1 AResX 1011.0
1 AResX 14930.0
1 AResX 15000.0
1 AResX 14790.0
1 AResX 14870.0
1 AResX 15656.0
1 AResY -3.4609389132356227E-5
1 AResY -3.0261965378031164E-5
1 AResY -2.8533385432183422E-5
1 AResY -3.3117547815209036E-5
1 AResY -2.5954816962325822E-5
1 AResY -4.009030973861627E-5
1 AResY -9.8969197281917332E-6
1 AResY -1.1565236945898505E-4
1 AResY -8.7384250946342945E-6
1 AResY -9.1479250841075554E-6
1 Cd                   0.0
1 Cd                   0.0
1 Cd                   0.0
1 Cd                   0.0
1 Cd                   5.7818401941997712E-6
10 Cd                   1.0310782376991499E-9
10 Cd                   1.0465605888949501E-9
10 Cd                   1.1779648224868799E-9
10 Cd                   1.16088739405521E-9


Куда же деваются остальные?


 
Kolan ©   (2008-05-06 11:21) [1]

Использую MS SQL Server 2000. Rjyrhtnyj MSDE


 
Sergey13 ©   (2008-05-06 11:31) [2]

> [0] Kolan ©   (06.05.08 11:21)
> саписей возвращается всего 29:

А из чего это видно?


 
Kolan ©   (2008-05-06 11:37) [3]

Из QueryAnalyzera


 
Anatoly Podgoretsky ©   (2008-05-06 11:43) [4]

> Kolan  (06.05.2008 11:21:00)  [0]

А как узнал,
А как ты в этой грязи разбираешься, какой Cd нужный, правильный?


 
Kolan ©   (2008-05-06 12:19) [5]

> А как ты в этой грязи разбираешься, какой Cd нужный, правильный?

Эмм&#133 Где грязь?

Для яность тогда скажу, что таблицы такие:
Params

3 MeasurmentID int 4 0
2 ParamID int 4 0
0 ParamValue float 8 1


Measurments
3 MeasurmentID int 4 0
0 DeviceID int 4 0
0 OperatorID int 4 0
0 OperationID int 4 1
0 CharacteristicsFileName varchar 1024 1
0 MeasurmentDateTime datetime 8 0
0 Note varchar 50 1


Devices
3 DeviceID int 4 0
0 DeviceNumber int 4 0
0 PartNumber int 4 0
0 DeviceTypeID int 4 0


ParamsDictionary
3 ParamID int 4 0
0 ParamName varchar 20 0


 
Ega23 ©   (2008-05-06 12:39) [6]

1 Cd                   0.0
1 Cd                   0.0
1 Cd                   0.0
1 Cd                   0.0


У тебя в НД 4 одинаковых значения. Вопрос: а нафига?


 
Kolan ©   (2008-05-06 12:45) [7]

> У тебя в НД 4 одинаковых значения. Вопрос: а нафига?

Потому, что у них разные другие поля, номера измерения напрмер. См. условие WHERE в [0].

Я вообще хочу их сгрупировать, но групировка тоже странно работает. Стал пробовать. А что-то не то даже при сортироваке&#133


 
Anatoly Podgoretsky ©   (2008-05-06 13:04) [8]


> Эмм… Где грязь?

А ты не видишь?
1 Cd                   33.0
1 Cd                   2.71909446089571E-9
1 Cs                   0.0
1 Cs                   5.3647565251156097E-8
1 RealResX             40.0
1 RealResY             50.0
1 Rd                   3647.7981949631298
1 Ld                   4.43077772442183
1 Ld                   20.0


 
Anatoly Podgoretsky ©   (2008-05-06 13:05) [9]


> Я вообще хочу их сгрупировать, но групировка тоже странно
> работает.

И как же ты такое сгрупируешь?
И почему у тебя все странно?


 
Kolan ©   (2008-05-06 13:13) [10]

А ты не видишь?
1 Cd                   33.0
1 Cd                   2.71909446089571E-9
1 Cs                   0.0
1 Cs                   5.3647565251156097E-8
1 RealResX             40.0
1 RealResY             50.0
1 Rd                   3647.7981949631298
1 Ld                   4.43077772442183
1 Ld                   20.0
> И как же ты такое сгрупируешь?

Я думаю что так:
SELECT Devices.PartNumber, ParamsDictionary.ParamName, Sum(ISNULL(Params.ParamValue, 0)) AS ParamValue
FROM Params, Measurments, Devices, ParamsDictionary
WHERE (1=1)
 AND (Params.MeasurmentID = Measurments.MeasurmentID)
 AND (Measurments.DeviceID = Devices.DeviceID)
 AND (Params.ParamID = ParamsDictionary.ParamID)
GROUP BY
 Devices.PartNumber, ParamsDictionary.ParamName


И будет

1 Cd                   33.0 + 2.71909446089571E-9
1 Cs                   0.0 + 5.3647565251156097E-8
1 RealResX             40.0 + 50.0
1 Rd                   3647.7981949631298
1 Ld                   4.43077772442183 + 20.0

Не пойму где я не прав&#133


 
Kolan ©   (2008-05-06 13:24) [11]

При этом при исполнении этого запроса в прграмме и выводе в отчет даныы похожи на то, что я хочу&#133


 
Anatoly Podgoretsky ©   (2008-05-06 14:05) [12]

> Kolan  (06.05.2008 13:13:10)  [10]

Так тебе и надо суммировать, а не приводить черт знае зачем, не нужные запросы.
Но похоже у тебя порушеная база.
Кроме того, убери ты это неявное соединение, сделай явное внутреннее.


 
Kolan ©   (2008-05-06 15:33) [13]

> Так тебе и надо суммировать, а не приводить черт знае зачем,
> не нужные запросы.

Да я просто не пойму как может сортировка повлиять на кол-во записей&#133


> Но похоже у тебя порушеная база.

А как это проверить? Не должна была вроде.


 
Anatoly Podgoretsky ©   (2008-05-06 16:23) [14]

> Kolan  (06.05.2008 15:33:13)  [13]

Для этого надо разбираться с серверами, как работает объединение, что такое NULL, оптимизаторы.
Ведь количество записей может измениться даже от простой смены порядка.
Повторяю совет - для начала перейди на явные соединения, проверь базу на консистентность или попроси это сделать администратора базы.


 
Anatoly Podgoretsky ©   (2008-05-06 16:24) [15]

И проверь планы.



Страницы: 1 вся ветка

Текущий архив: 2008.06.01;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
15-1208518662
man
2008-04-18 15:37
2008.06.01
Motorola C350


2-1209994985
Zoom
2008-05-05 17:43
2008.06.01
Pointer в адрес?


2-1210517763
ALoG
2008-05-11 18:56
2008.06.01
Обход бинарного дерева


2-1210419885
Незнайка
2008-05-10 15:44
2008.06.01
доступ к группе компонентов


2-1210171234
Fedor
2008-05-07 18:40
2008.06.01
Клиент + сервер