Я пытаюсь получить данные из программного обеспечения contability, который с помощью Microsoft SQL Server 2008.Microsoft SQL Server: SUM и LEFT JOIN двойных значений
Я пытаюсь получить общее количество денег и получить поле под названием Numero de Obra (количество работ) из счета в одной строке, проблема заключается в необходимости суммировать некоторые элементы, чтобы получить общее количество, и когда я получу дополнительный номер поля работы, мои данные дублируются.
Это запрос:
SELECT
GVA12.FECHA_EMIS AS [Fecha de emisión] ,
GVA53.T_Comp AS [Tipo comprobante] ,
GVA53.N_Comp AS [Nro. comprobante] ,
GVA12.COD_VENDED AS [Cód. vendedor] ,
CASE GVA12.COD_VENDED WHEN '**' THEN 'CONTADO' ELSE GVA23.NOMBRE_VEN END AS [Nombre Vendedor] ,
GVA12.COD_CLIENT AS [Cód. cliente] ,
CASE GVA12.COD_CLIENT WHEN '000000' THEN 'OCASIONAL' ELSE GVA14.RAZON_SOCI END AS [Razón social] ,
GVA12.COTIZ AS [Cotización] ,
GVA45.[DESC] as [Num_Obra]],
SUM(CASE WHEN GVA12.T_Comp <> 'FAC' and GVA15.Tipo_Comp = 'C' then (-1) ELSE (1) END * GVA53.CANTIDAD) AS [Cantidad] ,
SUM(CASE WHEN GVA12.T_Comp <> 'FAC' and GVA15.Tipo_Comp = 'C' then (-1) ELSE (1) END * CASE GVA12.Cotiz WHEN 0 THEN 0 ELSE CASE 'BIMONCTE' WHEN 'BIMONCTE' THEN (CASE GVA12.MON_CTE WHEN 1 THEN GVA53.IMP_NETO_P ELSE GVA53. IMP_NETO_P * GVA12.COTIZ END) WHEN 'BIORIGEN' THEN (CASE GVA12.MON_CTE WHEN 1 THEN GVA53.IMP_NETO_P/GVA12.COTIZ ELSE GVA53.IMP_NETO_P END) WHEN 'BICOTIZ' THEN(CASE GVA12.MON_CTE WHEN 1 THEN GVA53.IMP_NETO_P/1 ELSE GVA53.IMP_NETO_P * GVA12.COTIZ/1 END) END END) AS [Total]
FROM
GVA12 (NOLOCK)
INNER JOIN
GVA53 (NOLOCK) ON GVA53.T_COMP = GVA12.T_COMP AND GVA53.N_COMP = GVA12.N_COMP
INNER JOIN
GVA23 (NOLOCK) ON GVA12.COD_VENDED = GVA23.COD_VENDED
LEFT JOIN
GVA14 (NOLOCK) ON GVA12.COD_CLIENT = GVA14.COD_CLIENT
LEFT JOIN
GVA15 ON GVA15.IDENT_COMP = GVA12.T_COMP
LEFT JOIN
GVA45 (NOLOCK) ON GVA53.COD_ARTICU = 'NºOBRA' AND
GVA45.N_COMP = GVA53.N_COMP AND GVA45.N_RENGLON = GVA53.N_RENGL_V
WHERE
(GVA53.COD_ARTICU <> 'Art. Ajuste') AND (GVA53.COD_ARTICU <> '')
AND (GVA53.RENGL_PADR = 0 OR GVA53.INSUMO_KIT_SEPARADO =1)
GROUP BY
GVA12.FECHA_EMIS , GVA53.T_Comp , GVA53.N_Comp , GVA12.COD_VENDED , CASE GVA12.COD_VENDED WHEN '**' THEN 'CONTADO' ELSE GVA23.NOMBRE_VEN END , GVA12.COD_CLIENT , CASE GVA12.COD_CLIENT WHEN '000000' THEN 'OCASIONAL' ELSE GVA14.RAZON_SOCI END , GVA12.COTIZ,GVA45.[DESC]
Мой выходной ток:
number_invoce client Number_Of_Work Total
FAC A000500000354 Hospital NULL 90
FAC A000500000354 Hospital 346300 0.000000
Мой ожидаемый выход:
number_invoce client Number_Of_Work Total
A000500000354 Hospital 346300 90
У меня есть много разных таблиц, большинство из них не связанные с вопросом, поэтому я объясню только те, которые имеют значение:
GVA53: Он есть все строки из счета-фактуры
Например будет
number_invoce COD_ARTICU AMOUNT N_RENGL_V
A000500000354 Wall $50 1
A000500000354 Roof $40 2
A000500000354 number_of_work $0 3
GVA45: Это есть описание статьи
number_invoce DESC N_RENGL
A000500000354 1
A000500000354 2
A000500000354 346300 3
В резюме: мне нужно получить сумму из счета-фактуры, мне нужно суммировать элементы, и мне нужно получить поле DESC (описание) из номера позиции, связанного с n_rengl (количество строк) от GV45 до n_rengl_v от GV53 и где COD_ARTIC равно to number_of_w орк. Все работает, но я не понимаю, почему мои данные дублируются.
Большое спасибо
Set [Вредные Привычки пнуть - положить NOLOCK везде] (http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - НЕ РЕКОМЕНДУЕТСЯ *** использовать это везде - совсем наоборот! –
Спасибо, запрос был сгенерирован с помощью инструмента, имеющего программное обеспечение для обеспечения устойчивости. Я удалил все NOLOCK, но у меня все еще такая же проблема. – Matias