Если вы хотите уменьшить размер до десятичного (7,2) с десятичного (9,2), вам придется учитывать существующие данные со значениями, большими, чтобы соответствовать десятичному (7,2). Либо вам придется удалить те цифры, которые усечены, чтобы соответствовать вашему новому размеру. Если не было данных для поля, которое вы пытаетесь обновить, оно сделает это автоматически без проблем.

должаю получать это сообщение об ошибке каждый раз, когда я запускаю этот запрос:

Msg 8115, Level 16, State 8, Line 33
Arithmetic overflow error converting numeric to data type numeric.
The statement has been terminated.

Но если я изменю таблицу создания на (7,0), я не получу сообщение об ошибке. Но мне нужно, чтобы мои данные отображались в десятичном виде. Я попробовал 8,3 не работает.

Есть ли кто-нибудь, кто может помочь мне в этом? Любая помощь будет принята с благодарностью.

DECLARE @StartDate AS DATETIME
DECLARE @StartDate_y AS DATETIME
DECLARE @EndDate AS DATETIME
DECLARE @temp_y AS DATETIME

SET @temp_y = Dateadd(yy, Datediff(yy, 0, Getdate()), 0)
SET @StartDate_y = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, @temp_y)),
                                      Dateadd("ww", -2, @temp_y))
SET @StartDate = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, Getdate())),
                                  Dateadd("ww", -2, Getdate()))
SET @EndDate = Dateadd(dd, 6, @StartDate)

--temp table to hold all cities in list
CREATE TABLE ##temp
  (
     city VARCHAR(50)
  )

INSERT INTO ##temp
VALUES     ('ABERDEEN'),
            ('CHESAPEAKE'),
            ('Preffered-Seafood/CHICAGO'),
            ('Preffered-Redist/CHICAGO'),
            ('CLACKAMAS'),
            ('COLUMBUS'),
            ('CONKLIN'),
            ('DENVER'),
            ('FORT WORTH'),
            ('HANOVER PARK'),
            ('JACKSONVILLE'),
            ('LAKELAND'),
            ('MONTGOMERY'),
            ('PFW-NORTHEAST'),
            ('PFW-SOUTHEAST'),
            ('RIVERSIDE'),
            ('TRENTON,CANADA'),
            ('VERNON')

--temp to hold data for the cities
CREATE TABLE #temp
  (
     city            VARCHAR(50),
     ytdshipments    INT,
     ytdtotalweight  DECIMAL(7, 2) NOT NULL,
     ytdtotalcharges DECIMAL (7, 2) NOT NULL
  --YTDRevperPound decimal (7,2) not null
  )

INSERT INTO #temp
SELECT ##temp.city,
       0,
       0,
       0
FROM   ##temp

INSERT #temp
-- YTD shipments/Charges/Weight by city
SELECT city = CASE
                WHEN nameaddrmstr_1.city IN( 'ABERDEEN', 'CHESAPEAKE', 'CHICAGO'
                                             ,
                                             'CLACKAMAS',
                                             'COLUMBUS', 'CONKLIN', 'DENVER',
                                             'FORT WORTH',
                                             'HANOVER PARK', 'JACKSONVILLE',
                                             'LAKELAND'
                                             ,
                                             'MONTGOMERY'
                                                    ,
                                             'RIVERSIDE', 'TRENTON', 'VERNON' )
              THEN
                CASE
                  WHEN
              nameaddrmstr_1.city = 'CHICAGO'
              AND h.shipr = 'PREFRESVS' THEN 'Preffered-Redist/CHICAGO'
                WHEN
              nameaddrmstr_1.city = 'TRENTON'
              AND nameaddrmstr_1.city = 'CA' THEN 'TRENTON,CANADA'
                ELSE
              nameaddrmstr_1.city
                END
                ELSE 'Other'
              END,
       ytdshipments = COUNT(CONVERT(VARCHAR(10), h.dateshipped, 101)),
       ytdtotalweight =SUM(CASE
                             WHEN h.totaldimwgt > h.totalwgt THEN h.totaldimwgt
                             ELSE h.totalwgt
                           END),
       ytdtotalcharges = SUM (cs.totalestrevcharges)
--YTDRevperPound = convert(decimal(7,2),sum (cs.TotalEstRevCharges )/sum( CASE WHEN h.TotalDimWGT > > h.TotalWGT THEN h.TotalDimWGT ELSE h.TotalWGT END ))
FROM   as400.dbo.hawb AS h WITH(nolock)
       INNER JOIN as400.dbo.chargesummary AS cs
         ON h.hawbnum = cs.hawbnum
       LEFT OUTER JOIN as400.dbo.nameaddrmstr AS nameaddrmstr_1
         ON h.shipr = nameaddrmstr_1.nameaddrcode
WHERE  h.dateshipped >= '01/01/2010'
       AND h.dateshipped <= '12/19/2010'
       --WHERE H.DateShipped >= >= @StartDate_y AND H.dateshipped <= @EndDate 
       AND h.cust IN( 'DARDENREED', 'MAINEDARDE', 'MBMRIVRSDE', 'MBMCOLUMBS',
                      'MBMLAKELND', 'MBMFTWORTH', 'SYGMACOLUM', 'SYGMANETW6',
                      'MAI215', 'MBMMNTGMRY' )
GROUP  BY CASE
  WHEN nameaddrmstr_1.city IN( 'ABERDEEN', 'CHESAPEAKE', 'CHICAGO', 'CLACKAMAS',
                               'COLUMBUS', 'CONKLIN', 'DENVER', 'FORT WORTH',
                               'HANOVER PARK', 'JACKSONVILLE', 'LAKELAND',
                               'MONTGOMERY'
                                      ,
                               'RIVERSIDE', 'TRENTON', 'VERNON' ) THEN CASE
                                                                         WHEN
nameaddrmstr_1.city = 'CHICAGO'
AND h.shipr = 'PREFRESVS' THEN 'Preffered-Redist/CHICAGO'
                                                                         WHEN
nameaddrmstr_1.city = 'TRENTON'
AND nameaddrmstr_1.city = 'CA' THEN 'TRENTON,CANADA'
                                                                         ELSE
nameaddrmstr_1.city
                                                                       END
  ELSE 'Other'
END

SELECT #temp.city                 AS city,
       MAX(#temp.ytdshipments)    AS ytdshipments,
       MAX(#temp.ytdtotalweight)  AS ytdtotalweight,
       MAX(#temp.ytdtotalcharges) AS ytdtotalcharges
FROM   #temp WITH(nolock)
       LEFT OUTER JOIN ##temp
         ON ##temp.city = #temp.city
GROUP  BY #temp.city

DROP TABLE #temp

DROP TABLE ##temp  
 adolf garlic 13 янв. 2016 г., 10:07
почему не встроена опция форматирования?
 m.edmondson12 янв. 2011 г., 17:03
Я даже не собираюсь приводить это в порядок
 Martin Smith12 янв. 2011 г., 17:35
Я бросил ваш SQL через онлайн-форматировщик здесь.dpriver.com/pp/sqlformat.htm Может все еще сделать с ручной уборкой, хотя.

Ответы на вопрос(3)

что должен уточнить одну очень важную вещь для других (например, моего коллеги), которые наткнулись на эту ветку и получили неверную информацию.

Данный ответ («Попробуйте десятичную (9,2) или десятичную (10,2) или что-то еще») верный, но причина («увеличить количество цифр до десятичной») неверна.

десятичные (p, s) и числовые (p, s) оба указываютТочность и масштаб, «Точность» - это не количество цифр слева от десятичной дроби, а полная точность числа.

Например: десятичное число (2,1) охватывает от 0,0 до 9,9, поскольку точность составляет 2 цифры (от 00 до 99), а масштаб равен 1. десятичное число (4,1) охватывает от 000,0 до 999,9, десятичное число (4,2) охватывает от 00,00 до 99,99 десятичных (4,3) охватывает от 0,000 до 9,999

 adam010121 янв. 2015 г., 17:10
Я обновил свой ответ, чтобы отразить это.
 adam010121 янв. 2015 г., 17:02
Увеличивая точность и оставляя масштаб неизменным, вынаходятся увеличение количества цифр перед десятичной дробью. Так что то, что я сказал, не так, но я понимаю, как это может быть неправильно понято. Я так сказал, потому что ОП изначально пытался решить проблему, просто увеличив масштаб, но вы правы; это общая точность, которая должна быть увеличена.

что вы пытаетесь втиснуть число больше 99999,99 в свои десятичные поля. Изменение его на (8,3) ничего не даст, если оно больше 99999,999 - вам нужно увеличить количество цифрдо десятичный. Вы можете сделать это, увеличив точность (общее количество цифр до и после десятичной дроби). Вы можете оставить шкалу одинаковой, если вам не нужно изменять количество десятичных разрядов для хранения. Пытатьсяdecimal(9,2) или жеdecimal(10,2) или что угодно.

Вы можете проверить это, комментируяinsert #temp и посмотрите, какие числа дает вам оператор select, и посмотрите, больше ли они, чем может обработать ваш столбец.

 Shiham03 мая 2013 г., 07:12
@ user572984 так почему бы не отметить это как ответ!
 Ola Tuvesson13 июн. 2013 г., 14:57
Я бы не стал отвечать на вопросы людей с автоматически созданными учетными записями; они не понимают, где они находятся, и они не возвращаются, как только у них есть починка. @ user572984: ПРИВЕТ !? НИКТО ДОМОЙ?<экран касаний> Нет, я так не думаю.
 Elshan25 авг. 2015 г., 04:45
ПроверьтеDatabase field length равно для того, чтобыDataTableAdapter Длина этого конкретного столбца - конкретный параметр хранимой процедуры Length
 Wellington Lorindo17 дек. 2014 г., 17:15
Я снял точку десятичного числа, поэтому она стала больше. Спасибо!
 user57298412 янв. 2011 г., 18:18
Я получил его для работы с (11,2). Спасибо за вашу помощь.

2) с десятичного (9,2), вам придется учитывать существующие данные со значениями, большими, чтобы соответствовать десятичному (7,2). Либо вам придется удалить те цифры, которые усечены, чтобы соответствовать вашему новому размеру. Если не было данных для поля, которое вы пытаетесь обновить, оно сделает это автоматически без проблем.

Ваш ответ на вопрос