Как объединить строки в одну, MS SQL Server Management Studio - PullRequest
0 голосов
/ 03 июня 2011

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

Я хотел бы показать только одну строку для этого устройства, т.е. / RecordNumber Reg_string Детали материалов Labor Combo Smart Total Estimate. Номер записи не нужно выбирать в запросе, но может помочь при построении скрипта. Это мой сценарий.

    RecordNumber   Reg_string   Parts   Materials   Labour  Combo    Smart    Total Estimate
1              AB12ABC      NULL    NULL        NULL    222.27   0        222.27
2              AB12ABC      NULL    NULL        NULL    76.7     0        76.7
3              AB12ABC      NULL    NULL        NULL    48.1     0        48.1
4              AB12ABC      NULL    NULL        NULL    49.4     0        49.4
5              AB12ABC      NULL    NULL        12      NULL     1        13
6              AB12ABC      NULL    NULL        NULL    255      NULL     255
7              AB12ABC      NULL    NULL        NULL    255      NULL     255

Я бы хотел, чтобы результат был таким, пожалуйста:

RecordNumber   Reg_string   Parts   Materials   Labour  Combo    Smart    Total Estimate

 1              AB12ABC      NULL    NULL        12    906.47   1        919.47

Мой скрипт такой, если он помогает:

     SELECT     UnitData_Vehicle.Reg_String AS Registration, UnitData_Vehicle.VehID_String AS [Vendor Code], UnitData_Vehicle.Manu_String AS Make, 
                      UnitData_Vehicle.ManuNS_String AS [Make NS], SUM(CONVERT(money, UnitData_Vehicle_CompCond.Materials_String)) AS [Materials Price], 
                      CONVERT(money, UnitData_Vehicle_CompCond.Labour_String) AS [Labour Price], CONVERT(money, UnitData_Vehicle_CompCond.Combo_String) 
                      AS [Combination Price], CONVERT(money, UnitData_Vehicle_CompCond.PartSpend_String) AS [Parts Price], CONVERT(money, 
                      UnitData_Vehicle_CompCond.SmartRep_String) AS [Smart Price], CONVERT(money, UnitData_Vehicle_CompCond.Estimate_String) 
                      AS [Estimate EX VAT]
FROM         UnitData_Vehicle INNER JOIN
                      UnitData_Vehicle_CompCond ON UnitData_Vehicle.InspectionResultId = UnitData_Vehicle_CompCond.InspectionResultId
WHERE     (UnitData_Vehicle.InspectionProcedureName LIKE '%- inspection') AND (DATEDIFF(day, UnitData_Vehicle.InspectionDateTime, GETDATE()) = 2)
AND Reg_String = 'AB12ABC'
GROUP BY UnitData_Vehicle.EstimDate_DateTime, UnitData_Vehicle.Reg_String, UnitData_Vehicle.VehID_String, UnitData_Vehicle.Manu_String, 
                      UnitData_Vehicle.ManuNS_String, CONVERT(money, UnitData_Vehicle_CompCond.Labour_String), CONVERT(money, 
                      UnitData_Vehicle_CompCond.Combo_String), CONVERT(money, UnitData_Vehicle_CompCond.PartSpend_String), CONVERT(money, 
                      UnitData_Vehicle_CompCond.SmartRep_String), CONVERT(money, UnitData_Vehicle_CompCond.Estimate_String)

Ответы [ 5 ]

0 голосов
/ 03 июня 2011
SELECT  MAX(Reg_String), 
        SUM(Parts) As Parts, 
        SUM(Materials) AS Materials,
        SUM(Labour) AS Labour,
        SUM(Combo) AS Combo,
        SUM(Smart) AS Smart,
        SUM(Labour + Combo + Smart) AS TotalEstimate
FROM MyTable
GROUP BY Reg_String

используйте MAX(Reg_String) для отображения Reg_String также, поскольку max вернет тот же результат, поскольку запрос группируется по Reg_String

0 голосов
/ 03 июня 2011

Если я не совершаю ошибку, Total Estimate = лейбористская + комбинированная + умная? Ниже приведен запрос

SELECT  Reg_String, 
        SUM(Parts) As Parts, 
        SUM(Materials) AS Materials,
        SUM(Labour) AS Labour,
        SUM(Combo) AS Combo,
        SUM(Smart) AS Smart,
        SUM(Labour + Combo + Smart) AS TotalEstimate
FROM MyTable
GROUP BY Reg_String
0 голосов
/ 03 июня 2011

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

SELECT  Reg_String), 
        SUM(Parts) As Parts, 
        SUM(Materials) AS Materials,
        SUM(Labour) AS Labour,
        SUM(Combo) AS Combo,
        SUM(Smart) AS Smart,
        SUM(TotalEstimate) AS TotalEstimate
FROM MyTable
WHERE Reg_String = 'AB12ABC'
GROUP BY Reg_String
0 голосов
/ 03 июня 2011
SELECT     
UnitData_Vehicle.Reg_String AS Registration, 
UnitData_Vehicle.VehID_String AS [Vendor Code], 
UnitData_Vehicle.Manu_String AS Make, 
UnitData_Vehicle.ManuNS_String AS [Make NS], 
SUM(CONVERT(money, UnitData_Vehicle_CompCond.Materials_String)) AS [Materials Price], 
SUM(CONVERT(money, UnitData_Vehicle_CompCond.Labour_String)) AS [Labour Price], 
SUM(CONVERT(money, UnitData_Vehicle_CompCond.Combo_String)) AS [Combination Price], 
SUM(CONVERT(money, UnitData_Vehicle_CompCond.PartSpend_String)) AS [Parts Price], 
SUM(CONVERT(money, UnitData_Vehicle_CompCond.SmartRep_String)) AS [Smart Price], 
SUM(CONVERT(money, UnitData_Vehicle_CompCond.Estimate_String)) AS [Estimate EX VAT]
FROM         UnitData_Vehicle INNER JOIN UnitData_Vehicle_CompCond 
ON UnitData_Vehicle.InspectionResultId = UnitData_Vehicle_CompCond.InspectionResultId
WHERE     (UnitData_Vehicle.InspectionProcedureName LIKE '%- inspection') AND (DATEDIFF(day, UnitData_Vehicle.InspectionDateTime, GETDATE()) = 2) AND Reg_String = 'AB12ABC'

GROUP BY UnitData_Vehicle.EstimDate_DateTime, UnitData_Vehicle.Reg_String, UnitData_Vehicle.VehID_String, UnitData_Vehicle.Manu_String,UnitData_Vehicle.ManuNS_String
0 голосов
/ 03 июня 2011

Ваш запрос огромен и труден для чтения, но по сути, вам нужно СУММУ добавить столбцы, добавить «GROUP BY Reg_string» в конец запроса, очевидно, не включать «RecordNumber» в ваш вывод, так какэто не может быть сгруппировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...