konwersja atrybutu (varchar) do decimal

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

john_doe
Posty: 650
Rejestracja: 26 maja 2008, 22:15
Rola: Inny

konwersja atrybutu (varchar) do decimal

Post autor: john_doe »

hej,

w atrybutach trzymam ( atrybut jest typu liczba ) pewne ilości. Wyciągam je sql`elem. Potrzebuję je grupować i w ramach grup sumować.
taki kawałek kodu

Kod: Zaznacz cały

	, SUBSTRING(wg.atr_wartosc, 1, CHARINDEX('|', wg.atr_wartosc)-2) sku
	, REPLACE(qty.atr_wartosc, ',', '.') REPLA
	, sum(cast(REPLACE(qty.atr_wartosc, ',', '.') as decimal)) CA
	, qty.atr_wartosc A
zwraca np. ( kolumna 2 to atrybut z zamienionym przecinkiem na kropkę, kolumna 3 to "skastowany" atrybut, kolumna 4 to czysty atrybut)

kod_1 15 300 15
kod_1 20 400 20
kod_1 20 400 20
kod_1 20 400 20
kod_1 27.5 532 27,5
kod_1 50 1000 50
kod_1 60 1140 60

jak to posumować aby dobrze liczyło?

Awatar użytkownika
wacek
Posty: 714
Rejestracja: 27 paź 2008, 18:04
Rola: Administrator CDN XL
Lokalizacja: Łódzkie

Re: konwersja atrybutu (varchar) do decimal

Post autor: wacek »

DECLARE @Tab TABLE
(
KOD VARCHAR(10)
,ATR VARCHAR(10)
)
INSERT @Tab VALUES('KOD_1','27,5')
INSERT @Tab VALUES('KOD_1','27,5')
INSERT @Tab VALUES('KOD_1','27,5')
INSERT @Tab VALUES('KOD_1','27,5')
INSERT @Tab VALUES('KOD_1','15')
INSERT @Tab VALUES('KOD_1','15')
INSERT @Tab VALUES('KOD_1','15')
INSERT @Tab VALUES('KOD_1','15')
INSERT @Tab VALUES('KOD_1','20')
INSERT @Tab VALUES('KOD_1','20')
INSERT @Tab VALUES('KOD_1','20')
INSERT @Tab VALUES('KOD_1','20')

SELECT
KOD
,ATR
,SUM(CAST(REPLACE(ATR,',','.') AS DECIMAL(15,2))) SUMA
FROM @Tab
GROUP BY KOD,ATR
Pozdrawiam,
Robert

select convert(varchar(100),0x637a6173616d69207069737aea2074752067b375706f7479203a29)

woj
Posty: 139
Rejestracja: 22 lut 2012, 16:11
Rola: Inny

Re: konwersja atrybutu (varchar) do decimal

Post autor: woj »

w sql 2012



select

sum(TRY_CONVERT (decimal(15,4),REPLACE(atr_wartosc, ',', '.') ))

from cdn.Atrybuty
where atr_atkId=18

john_doe
Posty: 650
Rejestracja: 26 maja 2008, 22:15
Rola: Inny

Re: konwersja atrybutu (varchar) do decimal

Post autor: john_doe »

wacek zrobiłem dokładnie tak samo ( patrz mój post )

druga i trzecia kolumna

druga to zwykły replace i zwraca 27.5
trzecia to Twój cast z replace i zwraca 532 :)

zrobię podzapytanie i już ale chciałem tego uniknąć.

Generalnie wyciągam atrybut z zs a wartość netto i ilości ze spiętego RW
Ostatnio zmieniony 21 lut 2014, 10:52 przez john_doe, łącznie zmieniany 1 raz.

Awatar użytkownika
wacek
Posty: 714
Rejestracja: 27 paź 2008, 18:04
Rola: Administrator CDN XL
Lokalizacja: Łódzkie

Re: konwersja atrybutu (varchar) do decimal

Post autor: wacek »

Ty chyba liczysz dla dwóch różnych atrybutów i masz wielokrotność.
Pewnie masz 19 razy 28 = 532
Pozdrawiam,
Robert

select convert(varchar(100),0x637a6173616d69207069737aea2074752067b375706f7479203a29)

ODPOWIEDZ