Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.038 c
2-1210171234
Fedor
2008-05-07 18:40
2008.06.01
Клиент + сервер


15-1208497739
Дмитрий С
2008-04-18 09:48
2008.06.01
Большой ресурс. Правильно ли?


2-1209990011
TStas
2008-05-05 16:20
2008.06.01
Как бороться с сообщениями компилятора?


2-1209570171
Alexander
2008-04-30 19:42
2008.06.01
Компьютерные мощи


15-1208557575
Hero
2008-04-19 02:26
2008.06.01
ishelllink





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский