Skocz do zawartości


Close Open
Close Open
Zdjęcie

zestawienie sql wartość liczbowa w tabeli


  • Please log in to reply
24 replies to this topic

#1 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 30 maj 2010 - 10:15

Witam,

Proszę o pomoc w zestawieniu sql, chciałbym stworzyć zestawienie w , którym mógłbym podać własną wartość coś takiego:

uz_nazwisko
obrót minimalny ( gdzie podam wartość)
dok_wartosc

Czy jest to możliwe?

#2 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 30 maj 2010 - 11:01

Cytat z Helpa Subiekta:

  • parametry całkowitoliczbowe (oznaczane znakiem I)
  • parametry typu walutowego (oznaczane znakiem M)

Kolejne zapytanie prezentuje sposób użycia parametrów typu Money (liczba zmienno-przecinkowa). Zapytanie wyszukuje wszystkie towary, których objętość przekracza wartość podaną jako parametr zestawienia:
SELECT tw_Symbol AS [SYMBOL TOWARU], tw_Nazwa AS [NAZWA TOWARU], tw_JednMiary AS [JEDNOSTKA MIARY], tw_Objetosc AS [OBJĘTOŚĆ]


FROM tw__Towar

WHERE (tw_Objetosc > {M: Objętość minimalna})


Sławek

#3 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 30 maj 2010 - 17:54

chodzi mi o coś innego niż ten przykład z helpa ,
chciałbym nadać wartość np. nazwa kolumny obroty minimalne, gdzie mógłbym w zapytaniu odwołać się do tej wartości jak np

dok_wartość - ''obroty minimalne '' i uzyskać wynik w następnej kolumnie.
czy coś takiego da się zrobić.?

#4 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 01 czerwiec 2010 - 16:20

Proszę o odpowiedź.

#5 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 01 czerwiec 2010 - 16:55

Szanowny loginieMarcinie ;) - albo miałem ciężki weekend albo ni diabła nie rozumiem o co Ci chodzi. Może jakoś inaczej by się dało pokazać problem?

chciałbym nadać wartość np. nazwa kolumny obroty minimalne, ...

Tak średnio to po polsku jest chyba...
Chciałbyś nadać nazwę "obroty minimalne" kolumnie dok_wartosc ? I co miałby byś przekazywane do zapytania SQL ?

A może masz kilka kolumn i chciałbyś wybierać, którą pokazać?

Idę po kawę - może wtedy "stanie się jasność" :)
Sławek

#6 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 01 czerwiec 2010 - 19:46

Konkretnie chcę stworzyć zestawienie , które ma pokazywać obrót sprzedaży zaplanowany ( tą wartość liczbową muszę umieścić w zapytaniu sql np. 50000) przy zaplanowanej marży ze sprzedaży oraz wynikły obrót sprzedaży z marżą wynikłą .
Przedstawione dla magazynu oraz dla handlowców ( to może być jako osobne zapytanie)z różnicą która pokazuje jaki jest właściwy obrót minimalny w stosunku do osiągniętej marży.
Napisałem coś na podstawienie ostatniego zestawienia , które powstało z twoją pomocą
SELECT
n.magazyn,
(n.netto * 0 + 120000) as zaplanowany,
n.netto,
(n.netto - n.koszt) AS zysk,
( n.netto - n.koszt ) / n.netto * 100 AS marza,
(n.netto - n.koszt)/ (( n.netto - n.koszt ) / n.netto ) + (23160 - ( n.netto - n.koszt))/ (( n.netto - n.koszt ) / n.netto ) AS Minimum,
n.netto - ((n.netto - n.koszt)/ (( n.netto - n.koszt ) / n.netto ) + (23160 - ( n.netto - n.koszt))/ (( n.netto - n.koszt ) / n.netto )) AS Różnica
FROM (SELECT
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN [dok_WartTwNetto] + [dok_WartUsNetto] END) AS netto,
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN dok_wartmag ELSE dok_wartusnetto END) AS koszt,
mag_nazwa as magazyn

FROM dok__dokument INNER JOIN sl_Magazyn ON dok__Dokument.dok_MagId = sl_Magazyn.mag_Id

WHERE ( dok__dokument.dok_typ IN ( 1, 2 )
OR ( dok__dokument.dok_typ = 6 AND dok__dokument.dok_podtyp <> 1 ) )
AND (dok__Dokument. dok_MagId
IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn WHERE mag_Id IN (8 , 9, 10, 12, 13) :Magazyn: 8, 9, 10, 12, 13: zespół }))
AND (dok_DataWyst BETWEEN {DR:Data:2010-05-01:2010-05-31}) group by mag_nazwa ) AS n

Problem mam z tym że magazyny oraz osoby pracujące na magazynach w mają różne narzuty w poszczególnych miesiącach.

#7 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 01 czerwiec 2010 - 20:30

Chodzi o podawanie np tej kwoty 23160 jednokrotnie? Wystarczy, że kontrolki będą identyczne pod względem zawartości to pojawią się tylko raz

Jeżeli tak to sprawdź jak działa poniższe:
select
Minimum=2000+({M: Dla narzutu} )-2,
Roznica=1000+({M: Dla narzutu} )-2
Działania oczywiście zupełnie przypadkowe - tylko dla przykładu

Jeżeli chciałbyś przypisać narzut w zależności od wybranego miesiąca, magazynu i osoby to pewnie trudno byłoby bez dodatkowej własnej tabeli (no chyba, że to się dałoby jakoś wyliczyć)


EDIT

Tak dla innego przykładu można jeszcze tak:

select
Minimum=2000+({LI:Stach#100#Lucek#200#Maria#300#Krystyna#400#Majka#500#:Przedstawiciel})-2,
Roznica=1000+({LI:Stach#100#Lucek#200#Maria#300#Krystyna#400#Majka#500#:Przedstawiciel})-2

Sławek

#8 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 02 czerwiec 2010 - 20:59

A coś takiego :
SELECT

n.x

FROM (SELECT
sum (CASE WHEN uz_ID =29 THEN (dok_WartTwNetto *0 +1000) END) AS x,

W jaki sposób mogę zamienić ten element THEN (dok_WartTwNetto *0 +1000), żeby x był wartości 1000?

#9 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 02 czerwiec 2010 - 21:53

??

Gdzie jest haczyk ??

(CASE WHEN uz_ID =29 THEN 1000 END) AS x,
Sławek

#10 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 02 czerwiec 2010 - 22:45

super , o to mi chodziło , dzięki

A da się połączyć:
SELECT
n.miesiąc,
n.wystawił,
n.x as [plan rokowany],
n.y as [plan zysk],
n.netto,
( n.netto - n.koszt ) / n.netto * 100 AS [marza osoba],
n.z as [marża magazyn]
FROM (SELECT
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN [dok_WartTwNetto] + [dok_WartUsNetto] END) AS netto,
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN dok_wartmag END) AS koszt,
(CASE WHEN uz_ID =28 THEN 48000 when uz_ID = 29 then 72000 END) as x,
(CASE WHEN uz_ID =28 THEN 9264 when uz_ID = 29 then 13896 END) as y,
month(dok_datawyst) as miesiąc,
uz_Nazwisko as wystawił
FROM dok__dokument INNER JOIN sl_Magazyn ON dok__Dokument.dok_MagId = sl_Magazyn.mag_Id
INNER JOIN pd_Uzytkownik ON dok__Dokument.dok_PersonelId = pd_Uzytkownik.uz_Id
WHERE ( dok__dokument.dok_typ IN ( 2 )
OR ( dok__dokument.dok_typ = 6 AND dok__dokument.dok_podtyp <> 1 ) ) AND
(dok__Dokument. dok_MagId
IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn where mag_id IN ( 8 , 9, 10, 12, 13, 60):magazyn:10:zespół}))
AND (dok_DataWyst BETWEEN {DR:Data:2010-01-01:2010-01-31}) group by month(dok_datawyst),uz_Nazwisko,uz_ID ) AS n

Tak ,żeby n,z było marżą z magazynów, z zapytania dla tych samych okresów :
SELECT
( n.netto - n.koszt ) / n.netto * 100 AS marza
FROM (SELECT
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN [dok_WartTwNetto] + [dok_WartUsNetto] END) AS netto,
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN dok_wartmag ELSE dok_wartusnetto END) AS koszt
FROM dok__dokument INNER JOIN sl_Magazyn ON dok__Dokument.dok_MagId = sl_Magazyn.mag_Id
WHERE ( dok__dokument.dok_typ IN ( 1, 2 )
OR ( dok__dokument.dok_typ = 6 AND dok__dokument.dok_podtyp <> 1 ) )
AND (dok__Dokument. dok_MagId
IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn WHERE mag_Id IN (8 , 9, 10, 12, 13, 60) :Magazyn: 8, 9, 10, 12, 13, 60: zespół }))
AND (dok_DataWyst BETWEEN {DR:Data:2010-04-01:2010-04-30}) group by mag_Nazwa
) AS n
Ta marża ma uwzględnione koszty zakupu usług.

#11 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 06 czerwiec 2010 - 20:08

A próbowałeś w miejsce n.z wkleić treść twojego zapytania (w nawiasach najlepiej) ?
Oczywiście, żeby kontrolki się nie pojawiały 2 razy (w tym przypadku {CHL_DB} i {DR}) to ich zawartość musi być identyczna.
Sławek

#12 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 07 czerwiec 2010 - 16:40

ok. poszło , dzięki , tylko jest mały problem, pokazuje marże średnią z zadanego okresu , a potrzebuje w zależności od miesiąca tak jak jest to zadane w głównym zapytaniu , jak to zrobić?

Mam również pytanie co do (CASE
WHEN month(dok_datawyst) IN (1,2,3) THEN 480000
czy wartość 480000 może być rozpoznana jako cyfra , tak żeby można było ją podsumować

#13 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 07 czerwiec 2010 - 18:51

1.

jest mały problem, pokazuje marże średnią z zadanego okresu , a potrzebuje w zależności od miesiąca tak jak jest to zadane w głównym zapytaniu , jak to zrobić?


Musisz dodać warunek do tego podzapytania.
[marża magazyn]=(SELECT
...
coś tam coś tam
..
AND (dok_DataWyst BETWEEN {DR:Data:2010-04-01:2010-04-30}) 
AND month(dok_DataWyst)=n.miesiąc
 ) AS n2 

2.

Mam również pytanie co do (CASE
WHEN month(dok_datawyst) IN (1,2,3) THEN 480000
czy wartość 480000 może być rozpoznana jako cyfra , tak żeby można było ją podsumować


Czy chodzi Ci o posumowanie w liście zestawienia Subiekta ?

Jeżeli tak to spróbuj zastosować CAST (twoja_liczba AS MONEY) - Sumy są tworzone dla kolumn z danymi typu MONEY
Sławek

#14 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 07 czerwiec 2010 - 19:57

Jakoś mi nie wychodzi na ten moment mam :
SELECT
n.miesiąc,
n.wystawił,
n.x as [plan rokowany],
n.y as [plan zysk],
n.netto as [wartość sprzedaży],
( n.netto - n.koszt ) / n.netto * 100 AS [marza osoba],
n.netto * n.z/100 as [zysk magazyn],
n.z as [marża magazyn],
(n.netto * n.z/100)/ (( n.netto * n.z/100 ) / n.netto ) + (n.y - (n.netto * n.z/100))/ ((n.netto * n.z/100 ) / n.netto ) AS [plan do realizacji],
n.netto/((n.netto *n.z/100)/ (( n.netto *n.z/100 ) / n.netto ) + (n.y - (n.netto *n.z/100))/ ((n.netto *n.z/100 ) / n.netto ))*100 as[ % realizacji planu],
n.netto - ((n.netto *n.z/100)/ (( n.netto *n.z/100 ) / n.netto ) + (n.y - (n.netto *n.z/100))/ ((n.netto *n.z/100 ) / n.netto )) AS [Obrót do planu]
FROM (SELECT
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN [dok_WartTwNetto] + [dok_WartUsNetto] END) AS netto,

SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN dok_wartmag END) AS koszt,

(CASE
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (17,24,28,36) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (11,29,32) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (18,25,34) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (17,24,28,36) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (11,29,32) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (18,25,34) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (17,24,28,36) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (11,29,32) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (18,25,34) THEN CAST (10 AS MONEY)
END) as x,

(CASE
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (17,24,28,36) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (11,29,32) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (18,25,34) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (17,24,28,36) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (11,29,32) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (18,25,34) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (17,24,28,36) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (11,29,32) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (18,25,34) THEN CAST (1 AS MONEY)
END) as y,
(CASE
WHEN month(dok_datawyst)= 1 THEN '1styczeń' WHEN month(dok_datawyst)= 2 THEN '2luty'
WHEN month(dok_datawyst)= 3 THEN '3marzec' WHEN month(dok_datawyst)= 4 THEN '4kwiecień'
WHEN month(dok_datawyst)= 5 THEN '5maj' WHEN month(dok_datawyst)= 6 THEN '6czerwiec'
WHEN month(dok_datawyst)= 7 THEN '7lipiec' WHEN month(dok_datawyst)= 8 THEN '8sierpień'
WHEN month(dok_datawyst)= 9 THEN '9wrzesień' WHEN month(dok_datawyst)= 10 THEN '10październik'
WHEN month(dok_datawyst)= 11 THEN '11listopad' WHEN month(dok_datawyst)= 12 THEN '12grudzień'
end) as miesiąc,


(SELECT
( n2.netto - n2.koszt ) / n2.netto * 100 AS marza
FROM (SELECT
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN [dok_WartTwNetto] + [dok_WartUsNetto] END) AS netto,
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN dok_wartmag ELSE dok_wartusnetto END) AS koszt
FROM dok__dokument INNER JOIN sl_Magazyn ON dok__Dokument.dok_MagId = sl_Magazyn.mag_Id
WHERE ( dok__dokument.dok_typ IN ( 1, 2 )
OR ( dok__dokument.dok_typ = 6 AND dok__dokument.dok_podtyp <> 1 ) )
AND (dok__Dokument. dok_MagId IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn where mag_id IN ( 8 , 9, 10, 12, 13, 60):magazyn:10:zespół}))
AND (dok_DataWyst BETWEEN {DR:Data:2010-01-01:2010-03-31})
) AS n2) as z,


uz_Nazwisko as wystawił

FROM dok__dokument
INNER JOIN sl_Magazyn ON dok__Dokument.dok_MagId = sl_Magazyn.mag_Id
INNER JOIN pd_Uzytkownik ON dok__Dokument.dok_PersonelId = pd_Uzytkownik.uz_Id
WHERE ( dok__dokument.dok_typ IN (2 ) OR ( dok__dokument.dok_typ = 6 AND dok__dokument.dok_podtyp <> 1 ) )
AND (dok__Dokument. dok_MagId IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn where mag_id IN ( 8 , 9, 10, 12, 13, 60):magazyn:10:zespół}))
AND (uz_nazwisko LIKE '%{T: wystawione przez}%')
AND (dok_DataWyst BETWEEN {DR:Data:2010-01-01:2010-03-31}) group by month(dok_datawyst),uz_Nazwisko,uz_ID,mag_nazwa ) AS n

help?

Jakoś mi nie wychodzi na ten moment mam :
SELECT
n.miesiąc,
n.wystawił,
n.x as [plan rokowany],
n.y as [plan zysk],
n.netto as [wartość sprzedaży],
( n.netto - n.koszt ) / n.netto * 100 AS [marza osoba],
n.netto * n.z/100 as [zysk magazyn],
n.z as [marża magazyn],
(n.netto * n.z/100)/ (( n.netto * n.z/100 ) / n.netto ) + (n.y - (n.netto * n.z/100))/ ((n.netto * n.z/100 ) / n.netto ) AS [plan do realizacji],
n.netto/((n.netto *n.z/100)/ (( n.netto *n.z/100 ) / n.netto ) + (n.y - (n.netto *n.z/100))/ ((n.netto *n.z/100 ) / n.netto ))*100 as[ % realizacji planu],
n.netto - ((n.netto *n.z/100)/ (( n.netto *n.z/100 ) / n.netto ) + (n.y - (n.netto *n.z/100))/ ((n.netto *n.z/100 ) / n.netto )) AS [Obrót do planu]
FROM (SELECT
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN [dok_WartTwNetto] + [dok_WartUsNetto] END) AS netto,

SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN dok_wartmag END) AS koszt,

(CASE
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (17,24,28,36) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (11,29,32) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (18,25,34) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (17,24,28,36) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (11,29,32) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (18,25,34) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (17,24,28,36) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (11,29,32) THEN CAST (10 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (18,25,34) THEN CAST (10 AS MONEY)
END) as x,

(CASE
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (17,24,28,36) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (11,29,32) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (1,2,3) and uz_ID IN (18,25,34) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (17,24,28,36) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (11,29,32) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (4,5,6) and uz_ID IN (18,25,34) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (17,24,28,36) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (11,29,32) THEN CAST (1 AS MONEY)
WHEN month(dok_datawyst) IN (7,8,9) and uz_ID IN (18,25,34) THEN CAST (1 AS MONEY)
END) as y,
(CASE
WHEN month(dok_datawyst)= 1 THEN '1styczeń' WHEN month(dok_datawyst)= 2 THEN '2luty'
WHEN month(dok_datawyst)= 3 THEN '3marzec' WHEN month(dok_datawyst)= 4 THEN '4kwiecień'
WHEN month(dok_datawyst)= 5 THEN '5maj' WHEN month(dok_datawyst)= 6 THEN '6czerwiec'
WHEN month(dok_datawyst)= 7 THEN '7lipiec' WHEN month(dok_datawyst)= 8 THEN '8sierpień'
WHEN month(dok_datawyst)= 9 THEN '9wrzesień' WHEN month(dok_datawyst)= 10 THEN '10październik'
WHEN month(dok_datawyst)= 11 THEN '11listopad' WHEN month(dok_datawyst)= 12 THEN '12grudzień'
end) as miesiąc,


(SELECT
( n2.netto - n2.koszt ) / n2.netto * 100 AS marza
FROM (SELECT
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN [dok_WartTwNetto] + [dok_WartUsNetto] END) AS netto,
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN dok_wartmag ELSE dok_wartusnetto END) AS koszt
FROM dok__dokument INNER JOIN sl_Magazyn ON dok__Dokument.dok_MagId = sl_Magazyn.mag_Id
WHERE ( dok__dokument.dok_typ IN ( 1, 2 )
OR ( dok__dokument.dok_typ = 6 AND dok__dokument.dok_podtyp <> 1 ) )
AND (dok__Dokument. dok_MagId IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn where mag_id IN ( 8 , 9, 10, 12, 13, 60):magazyn:10:zespół}))
AND (dok_DataWyst BETWEEN {DR:Data:2010-01-01:2010-03-31})
) AS n2) as z,


uz_Nazwisko as wystawił

FROM dok__dokument
INNER JOIN sl_Magazyn ON dok__Dokument.dok_MagId = sl_Magazyn.mag_Id
INNER JOIN pd_Uzytkownik ON dok__Dokument.dok_PersonelId = pd_Uzytkownik.uz_Id
WHERE ( dok__dokument.dok_typ IN (2 ) OR ( dok__dokument.dok_typ = 6 AND dok__dokument.dok_podtyp <> 1 ) )
AND (dok__Dokument. dok_MagId IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn where mag_id IN ( 8 , 9, 10, 12, 13, 60):magazyn:10:zespół}))
AND (uz_nazwisko LIKE '%{T: wystawione przez}%')
AND (dok_DataWyst BETWEEN {DR:Data:2010-01-01:2010-03-31}) group by month(dok_datawyst),uz_Nazwisko,uz_ID,mag_nazwa ) AS n

help?

To samo będę chciał zastosować zamiast miesięcy dla kwartałów i podsumowania roku
Jak to zrobić przez UNION, jak z miesiąca 1,2,3 zrobić kwartał I?

#15 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 08 czerwiec 2010 - 06:52

Nie wnikając w treść zapytania to raczej tak:

SELECT
n.miesiąc,
n.wystawił,
cast(n.x as money) as [plan rokowany],
cast(n.y as money) as [plan zysk],
n.netto as [wartość sprzedaży],
( n.netto - n.koszt ) / n.netto * 100 AS [marza osoba],
n.netto * n.z/100 as [zysk magazyn],
n.z as [marża magazyn],
(n.netto * n.z/100)/ (( n.netto * n.z/100 ) / n.netto ) + (n.y - (n.netto * n.z/100))/ ((n.netto * n.z/100 ) / n.netto ) AS [plan do realizacji],
n.netto/((n.netto *n.z/100)/ (( n.netto *n.z/100 ) / n.netto ) + (n.y - (n.netto *n.z/100))/ ((n.netto *n.z/100 ) / n.netto ))*100 as[ % realizacji planu],
n.netto - ((n.netto *n.z/100)/ (( n.netto *n.z/100 ) / n.netto ) + (n.y - (n.netto *n.z/100))/ ((n.netto *n.z/100 ) / n.netto )) AS [Obrót do planu]
FROM (SELECT
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN [dok_WartTwNetto] + [dok_WartUsNetto] END) AS netto,

SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN dok_wartmag END) AS koszt,

(CASE
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (17,24,28,36) THEN 10
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (11,29,32) THEN 10
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (18,25,34) THEN 10
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (17,24,28,36) THEN 10
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (11,29,32) THEN 10
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (18,25,34) THEN 10
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (17,24,28,36) THEN 10
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (11,29,32) THEN 10
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (18,25,34) THEN 10
END) as x,
(CASE
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (17,24,28,36) THEN 1
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (11,29,32) THEN 1
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (18,25,34) THEN 1
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (17,24,28,36) THEN 1
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (11,29,32) THEN 1
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (18,25,34) THEN 1
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (17,24,28,36) THEN 1
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (11,29,32) THEN 1
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (18,25,34) THEN 1
END) as y,

dbo.fnNazwaokresu('mm',d1.dok_DataWyst) as miesiąc,

(SELECT
( n2.netto - n2.koszt ) / n2.netto * 100 AS marza
FROM (SELECT
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN [dok_WartTwNetto] + [dok_WartUsNetto] END) AS netto,
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN dok_wartmag ELSE dok_wartusnetto END) AS koszt
FROM dok__dokument d2 INNER JOIN sl_Magazyn ON d2.dok_MagId = sl_Magazyn.mag_Id
WHERE ( d2.dok_typ IN ( 1, 2 )
OR ( d2.dok_typ = 6 AND d2.dok_podtyp <> 1 ) )
AND (d2. dok_MagId IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn where mag_id IN ( 1, 2 , 8 , 9, 10, 12, 13, 60):magazyn:10:zespół}))
AND (d2.dok_DataWyst BETWEEN {DR:Data:2010-01-01:2010-03-31})
AND dbo.fnNazwaokresu('mm',d2.dok_DataWyst)=dbo.fnNazwaokresu('mm',d1.dok_datawyst)
) AS n2) as z,

uz_Nazwisko as wystawił

FROM dok__dokument d1
INNER JOIN sl_Magazyn ON d1.dok_MagId = sl_Magazyn.mag_Id
INNER JOIN pd_Uzytkownik ON d1.dok_PersonelId = pd_Uzytkownik.uz_Id
WHERE ( d1.dok_typ IN (2 ) OR ( d1.dok_typ = 6 AND d1.dok_podtyp <> 1 ) )
AND (d1. dok_MagId IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn where mag_id IN ( 1, 2 , 8 , 9, 10, 12, 13, 60):magazyn:10:zespół}))
AND (uz_nazwisko LIKE '%{T: wystawione przez}%')
AND (d1.dok_DataWyst BETWEEN {DR:Data:2010-01-01:2010-03-31}) group by dbo.fnNazwaokresu('mm',d1.dok_DataWyst),month(d1.dok_datawyst),uz_Nazwisko,uz_ID,mag_nazwa ) AS n



jak z miesiąca 1,2,3 zrobić kwartał I?


datepart
http://msdn.microsof...y/ms174420.aspx
Sławek

#16 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 08 czerwiec 2010 - 15:00

czy jest możliwość wyboru zapytania , chcę stworzyć identyczne zapytanie na kwartały i na podsumowanie roku, na zasadzie UNION czy przez listy wyboru można top zrobić np. zestawienie miesiącami, kwartałami , rokiem?

#17 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 10 czerwiec 2010 - 15:32

Wracając do tej marży to dziękuje za pomoc , czy mógłbyś to trochę zmienić na ten moment jeżeli zaznaczę więcej niż jeden magazyn jest pokazana średnia marża,
a ja potrzebuje marże prawdziwą z magazynu.

Ten post był edytowany przez Alutka dnia: 10 czerwiec 2010 - 16:01
nie cytuj posta, który jest bezpośrednio nad Twoim - Alutka


#18 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 11 czerwiec 2010 - 09:34

Coś koło tego:

SELECT
n.miesiąc,
n.magazyn,
n.wystawił,
cast(n.x as money) as [plan rokowany],
cast(n.y as money) as [plan zysk],
n.netto as [wartość sprzedaży],
( n.netto - n.koszt ) / n.netto * 100 AS [marza osoba],
n.netto * n.z/100 as [zysk magazyn],
n.z as [marża magazyn],
(n.netto * n.z/100)/ (( n.netto * n.z/100 ) / n.netto ) + (n.y - (n.netto * n.z/100))/ ((n.netto * n.z/100 ) / n.netto ) AS [plan do realizacji],
n.netto/((n.netto *n.z/100)/ (( n.netto *n.z/100 ) / n.netto ) + (n.y - (n.netto *n.z/100))/ ((n.netto *n.z/100 ) / n.netto ))*100 as[ % realizacji planu],
n.netto - ((n.netto *n.z/100)/ (( n.netto *n.z/100 ) / n.netto ) + (n.y - (n.netto *n.z/100))/ ((n.netto *n.z/100 ) / n.netto )) AS [Obrót do planu]
FROM (SELECT
mag_nazwa as magazyn,
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN [dok_WartTwNetto] + [dok_WartUsNetto] END) AS netto,

SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN dok_wartmag END) AS koszt,

(CASE
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (17,24,28,36) THEN 10
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (11,29,32) THEN 10
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (18,25,34) THEN 10
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (17,24,28,36) THEN 10
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (11,29,32) THEN 10
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (18,25,34) THEN 10
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (17,24,28,36) THEN 10
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (11,29,32) THEN 10
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (18,25,34) THEN 10
END) as x,
(CASE
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (17,24,28,36) THEN 1
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (11,29,32) THEN 1
WHEN month(d1.dok_datawyst) IN (1,2,3) and uz_ID IN (18,25,34) THEN 1
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (17,24,28,36) THEN 1
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (11,29,32) THEN 1
WHEN month(d1.dok_datawyst) IN (4,5,6) and uz_ID IN (18,25,34) THEN 1
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (17,24,28,36) THEN 1
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (11,29,32) THEN 1
WHEN month(d1.dok_datawyst) IN (7,8,9) and uz_ID IN (18,25,34) THEN 1
END) as y,

dbo.fnNazwaokresu('mm',d1.dok_DataWyst) as miesiąc,

(SELECT
( n2.netto - n2.koszt ) / n2.netto * 100 AS marza
FROM (SELECT
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN [dok_WartTwNetto] + [dok_WartUsNetto] END) AS netto,
SUM(CASE WHEN dok_typ IN ( 2, 6 ) THEN dok_wartmag ELSE dok_wartusnetto END) AS koszt
FROM dok__dokument d2 INNER JOIN sl_Magazyn ON d2.dok_MagId = sl_Magazyn.mag_Id
WHERE ( d2.dok_typ IN ( 1, 2 )
OR ( d2.dok_typ = 6 AND d2.dok_podtyp <> 1 ) )
AND (d2. dok_MagId =d1.dok_MagId)
AND (d2.dok_DataWyst BETWEEN {DR:Data:2010-01-01:2010-03-31})
AND dbo.fnNazwaokresu('mm',d2.dok_DataWyst)=dbo.fnNazwaokresu('mm',d1.dok_datawyst)
) AS n2) as z,

uz_Nazwisko as wystawił

FROM dok__dokument d1
INNER JOIN sl_Magazyn ON d1.dok_MagId = sl_Magazyn.mag_Id
INNER JOIN pd_Uzytkownik ON d1.dok_PersonelId = pd_Uzytkownik.uz_Id
WHERE ( d1.dok_typ IN (2 ) OR ( d1.dok_typ = 6 AND d1.dok_podtyp <> 1 ) )
AND (d1. dok_MagId IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn where mag_id IN ( 8 , 9, 10, 12, 13, 60):magazyn:10:zespół}))
AND (uz_nazwisko LIKE '%{T: wystawione przez}%')
AND (d1.dok_DataWyst BETWEEN {DR:Data:2010-01-01:2010-03-31}) group by dbo.fnNazwaokresu('mm',d1.dok_DataWyst),month(d1.dok_datawyst),uz_Nazwisko,uz_ID,d1.dok_magid,mag_nazwa ) AS n

Sławek

#19 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 15 czerwiec 2010 - 11:59

Dokładnie , dziękuje brakuje mi jeszcze jednego elementu , chcę zamienić ,, (d1. dok_MagId IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn where mag_id IN ( 8 , 9, 10, 12, 13, 60):magazyn:10:zespół})),, na wybór po użytkowniku ale nie na zasadzie : (dok_PersonelId IN {CHL_DB: SELECT uz_Id, uz_Nazwisko + ' ' + uz_Imie AS NAZWA FROM pd_Uzytkownik where uz_status = 1 ORDER BY NAZWA:Dla pracownika:})
Group By uz_Nazwisko tylko chcę pogrupować pracowników np. uz_Id ( 8,9) = zespół II, uz_Id (10) = zespół I,
Robię coś takiego: uz_Id IN ({CHL:zespół1#8#zespół2#10#:zespół:}) ale nie potrafię ustawic na wybór dwóch uz_id #(8,9)#
Jak to zrobić?

#20 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 16 czerwiec 2010 - 15:24

Utwórz swoją tabelę przechowującą przyporządkowanie do zespołów, podłącz do tego zapytania i wybieraj po zespołach.
Sławek




0 Użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników