Конференция "Начинающим" » Сортировка приводит к изменению количества записей, почему?
 
  • Kolan © (06.05.08 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 © (06.05.08 11:21) [1]
    Использую MS SQL Server 2000. Rjyrhtnyj MSDE
  • Sergey13 © (06.05.08 11:31) [2]
    > [0] Kolan ©   (06.05.08 11:21)
    > саписей возвращается всего 29:

    А из чего это видно?
  • Kolan © (06.05.08 11:37) [3]
    Из QueryAnalyzera
  • Anatoly Podgoretsky © (06.05.08 11:43) [4]
    > Kolan  (06.05.2008 11:21:00)  [0]

    А как узнал,
    А как ты в этой грязи разбираешься, какой Cd нужный, правильный?
  • Kolan © (06.05.08 12:19) [5]
    > А как ты в этой грязи разбираешься, какой Cd нужный, правильный?

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

    Для яность тогда скажу, что таблицы такие:
    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 © (06.05.08 12:39) [6]
    1 Cd                   0.0
    1 Cd                   0.0
    1 Cd                   0.0
    1 Cd                   0.0



    У тебя в НД 4 одинаковых значения. Вопрос: а нафига?
  • Kolan © (06.05.08 12:45) [7]
    > У тебя в НД 4 одинаковых значения. Вопрос: а нафига?

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

    Я вообще хочу их сгрупировать, но групировка тоже странно работает. Стал пробовать. А что-то не то даже при сортироваке…
  • Anatoly Podgoretsky © (06.05.08 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 © (06.05.08 13:05) [9]

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

    И как же ты такое сгрупируешь?
    И почему у тебя все странно?
  • Kolan © (06.05.08 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


    Не пойму где я не прав…
  • Kolan © (06.05.08 13:24) [11]
    При этом при исполнении этого запроса в прграмме и выводе в отчет даныы похожи на то, что я хочу…
  • Anatoly Podgoretsky © (06.05.08 14:05) [12]
    > Kolan  (06.05.2008 13:13:10)  [10]

    Так тебе и надо суммировать, а не приводить черт знае зачем, не нужные запросы.
    Но похоже у тебя порушеная база.
    Кроме того, убери ты это неявное соединение, сделай явное внутреннее.
  • Kolan © (06.05.08 15:33) [13]
    > Так тебе и надо суммировать, а не приводить черт знае зачем,
    > не нужные запросы.

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


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

    А как это проверить? Не должна была вроде.
 
Конференция "Начинающим" » Сортировка приводит к изменению количества записей, почему?
Есть новые Нет новых   [134433   +22][b:0.001][p:0.006]