1. SQL / Говнокод #28593

    −3

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    SELECT
    DISTINCT customer_contracts_ref._Description						AS Номер_договора,
    
    CAST(dateadd(year, -2000, customer_contracts_ref._Fld418) as date)	AS Дата_договора,
    
    TSBO_ref._Description											AS ЦБО,
    
    trade_for_service._Number										AS Номер_сделки,
    
    CAST(dateadd(year, -2000, customer_contracts_ref._Fld419) as date)	AS Дата_сделки,
    
    service_ref._Description											AS Вид_услуги,
    
    ISNULL(trade_for_service._Fld7941, 0)	AS Сумма_сделки,
    
    ISNULL(STUFF(
    	(SELECT ', ', _Number as [text()]
    	FROM MTCKCenter.dbo._Document129	implementation_service_2
    	WHERE implementation_service._Fld2613RRef = implementation_service_2._Fld2613RRef
    	FOR XML PATH ('')), 1, 1, ''), 'ОТСУТСТВУЕТ')																		AS Номер_реализации,
    
    ISNULL(STUFF(	
    	(SELECT ', ',CAST(dateadd(year, -2000, trade_for_service._Fld16346) as date) as [text()]
    	FROM MTCKCenter.dbo._Document129		implementation_service_2
    	WHERE implementation_service._Fld2613RRef = implementation_service_2._Fld2613RRef
    	FOR XML PATH ('')), 1, 1, ''), '-')																					AS Дата_реализации,
    
    CAST(customer_ref._Description as varchar(50))			AS Контрагент,
    
    CASE trade_for_service._Fld9233
    	WHEN 0
    		THEN 'нет'
    	ELSE 'да'
    		END																									AS УТП_сделка,
    
    CASE implementation_service._Fld8224
    	WHEN 0
    		THEN 'да'
    	ELSE 'нет'
    		END																				AS УТП_реализация,
    
    CASE
    	WHEN implementation_service._Fld8224 = 0
    		THEN SUM(ISNULL(CAST(implementation_service._Fld2632 as money), 0)) 
    	ELSE '-'
    		END																				AS Сумма_УТП,
    	
    ISNULL(shopping._Fld1772,0)																	AS Сумма_оплаты_плюс,
    
    FROM
    MTCKCenter.dbo._Document7939		trade_for_service
    
    JOIN MTCKCenter.dbo._Reference29	  customer_contracts_ref
    ON trade_for_service._Fld7945RRef =   customer_contracts_ref._IDRRef
    
    JOIN MTCKCenter.dbo._Reference90	  service_ref
    ON trade_for_service._Fld7942RRef =   service_ref._IDRRef
    
    JOIN MTCKCenter.dbo._Reference93	  TSBO_ref
    ON trade_for_service._Fld7947RRef =   TSBO_ref._IDRRef
    
    LEFT JOIN MTCKCenter.dbo._Document129 implementation_service
    ON trade_for_service._Fld7945RRef =   implementation_service._Fld2613RRef
    
    JOIN MTCKCenter.dbo._Reference44	  customer_ref
    ON trade_for_service._Fld7944RRef =   customer_ref._IDRRef
    
    LEFT JOIN MTCKCenter.dbo._Document115	  shopping
    ON trade_for_service._Fld7945RRef =   shopping._Fld1749RRef
    
    LEFT JOIN MTCKCenter.dbo._Document104_VT1460 corrections1
    ON trade_for_service._Fld7945RRef =	corrections1._Fld1463RRef
    
    LEFT JOIN MTCKCenter.dbo._Document104_VT1476 corrections2
    ON trade_for_service._Fld7945RRef = corrections2._Fld1479RRef
    
    LEFT JOIN MTCKCenter.dbo._Document98  refunds
    ON trade_for_service._Fld7944RRef =   refunds._Fld1199RRef
    
    LEFT JOIN MTCKCenter.dbo._Document133_VT2880 write_off_to_
    ON trade_for_service._Fld7945RRef = write_off_to_._Fld5602_RRRef
    
    WHERE
    	(_Fld7942RRef=0x9C8F02DA550767D34576572C765E712A -- уменьшение стоимости авто
    OR	 _Fld7942RRef=0xB999001DD8B71C2811EA5143E3D901D3) -- доплата за а/м
    
    AND	service_ref._Marked = 0x00
    AND trade_for_service._Posted = 0x01
    
    GROUP BY customer_contracts_ref._Description, trade_for_service._Posted,
    customer_contracts_ref._Fld418, customer_contracts_ref._Fld419,
    TSBO_ref._Description, service_ref._Description,
    shopping._Fld1772, trade_for_service._Fld7941,
    implementation_service._Fld2613RRef,
    trade_for_service._Fld16346, customer_ref._Description,
    trade_for_service._Fld9233, implementation_service._Fld8224,
    implementation_service._Fld2632, trade_for_service._Fld8413,
    corrections1._Fld8389, corrections2._Fld8390,
    refunds._Fld1221, write_off_to_._Fld2887,
    write_off_to_._Fld2888, trade_for_service._Number

    Здравия всем желающим понюхать эту реальную кучу!
    Есть БД, в которую данные заносились на похуй абсолютно.

    Пример:

    Номер_договора | Номер_сделки | Номер_реализации | Сумма_залупа | Сумма_кастюма | Сумма_второй_палочки_твикс |....|...|...|...|...|
    а б в 300 3414 123424
    а б в 300 3414 123424
    г д е 134 154 17
    г д ж 213 3903 125627
    г д ж 213 13.151123151 125627

    !ЗАДАЧА!

    Надо выгрузить таблицу, в которой будут
    1. ДИСТИНКТ номер_договора, дата_договора,
    2. ДИСТИНКТ номер_сделки, дата_сделки (1 договор = 1 сделка),
    3. ЧЕРЕЗ ЗАПЯТУЮ В 1ой ЯЧЕЙКЕ номер_реализации, дата_реализации (в одной сделке их может быть больше 1),
    4. Запилить оконную функцию, кейс, или че нахуй угодно(я месяц работаю, до этого тыкал сиквел в вузе тока,
    поэтому возможно просто не вижу более адекватное решение), которые
    будут СУММИРОВАТЬ сумму_залупу, если у нее по 1 договору несколько РАЗНЫХ значений, и другие суммы,
    или ВЫБИРАТЬ только одно значение, если они одинаковые по 1 договору.

    1, 2, 3 пункты коряво, но разобрался. Зделал)
    На 4ом жоско хочется пробить башней стену, вообще не понимаю, как это написать нормально.

    Запостил: solntse_v_zenite, 09 Февраля 2023

    Комментарии (1) RSS

    • М, рыба моя, неужели ты действительно полагаешь, что до тебя и твоего говна тут кому-то есть дело? Просто съебни в туман.
      Ответить

    Добавить комментарий