Аймен және жылмен sql-де сомасымен

Менде сақталған рәсім бар және таңдамалы нұсқа болып табылады:

SELECT     { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits
FROM         [Order]
WHERE     (YEAR(OrderDate) = @year)
GROUP BY { fn MONTHNAME(OrderDate) }, YEAR(OrderDate)

бұл әр айдың жалпы сомасын көрсетеді Бірақ нәтижеге ай және жыл бойынша тапсырыс беруім керек, ал менің нәтижелерім келесідей:

April 2013 
February 2013 
January 2013 
June 2013 
March 2013 
May 2013 

Мұндай жағдайда қандай шешім бар?

8

7 жауаптар

Мынаны көріңіз:

SELECT     { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits
FROM         [Order]
WHERE     (YEAR(OrderDate) = @year)
GROUP BY { fn MONTHNAME(OrderDate) }, MONTH(OrderDate), YEAR(OrderDate)
order by Year(orderDate),month(OrderDate)

Ескерту: Сіз топқа жазған кез келген өрістерді қосуыңыз керек

8
қосылды
рахмет, бұл жұмыс Ұлы .. :)) Perfect
қосылды автор Bruce, көзі

Соңында соңында бұйрығын пайдалану керек

SELECT     { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits
FROM         [Order]
WHERE     (YEAR(OrderDate) = @year)
GROUP BY { fn MONTHNAME(OrderDate) }, YEAR(OrderDate) 
ORDER BY { fn MONTH(OrderDate) }, YEAR(OrderDate)

немесе

Сіз мұны істей аласыз

SELECT     CASE { fn MONTH(OrderDate) } 
            when 0 then 'JAN'
            when 1 then 'FEB'
            when 2 then 'MAR'
            when 3 then 'APR'
            when 4 then 'MAY'
            when 5 then 'JUN'
            when 6 then 'JUL'
            when 7 then 'AUG'
            when 8 then 'SEP'
            when 9 then 'OCT'
            when 10 then 'NOV'
            when 11 then 'DEC'
           END
      AS MonthName, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits
    FROM         [Order]
    WHERE     (YEAR(OrderDate) = @year)
    GROUP BY { fn MONTH(OrderDate) }, YEAR(OrderDate) 
    ORDER BY { fn MONTH(OrderDate) }, YEAR(OrderDate)
1
қосылды
Мен өз сұрағымды редакцияладым ... қазір тексеріп, маған хабарлаңыз
қосылды автор Ravi, көзі
Қазір ......
қосылды автор Ravi, көзі
@bruce сізбен не болды, сіз кез келген жауапты қабылдауға шатастырасыз ба? ? : D
қосылды автор Ravi, көзі
hehe кешіріңіз веб-сайтында жаңа, мен бірден бірнеше жауап аламын деп ойлаймын :))) thanks @jWeavers
қосылды автор Bruce, көзі
иә, бұл үлкен шешім де, көп рахмет :)
қосылды автор Bruce, көзі
Бұл жағдайда fn MONTH (OrderDate) тобына емес, менде fn MONTHNAME орнына рахмет (OrderDate) және бұл жақсы жұмыс, бірақ айдың нөмірін нөмір көрсетпеу керек.
қосылды автор Bruce, көзі
рахмет, бірақ Кешіріңіз Мен мұны тексердім және сол нәтиже береді Сәуір, содан ақпан қаңтар қаңтар .....
қосылды автор Bruce, көзі

Егер сіз Jan, Feb, March сияқты тапсырыс бергіңіз келсе

SELECT 
  month(OrderDate) MonthName, 
  year(OrderDate) Year, 
  sum(TotalValue) Profits
FROM         
  [Order]
WHERE     
  month(OrderDate) = @year
ORDER BY 
  year(OrderDate), 
  month(OrderDate)
GROUP BY 
  year(OrderDate),
  month(OrderDate)
1
қосылды
Сіз дұрыссыз - түпнұсқа дұрыс емес түсініктемені жойдым. Рахмет
қосылды автор Ryan, көзі
@Ryan сіз оны SELECT бөлігіне қоюдың қажеті жоқ, сіз кез келген тапсырысты GROUP BY
қосылды автор Bob Vale, көзі
Мен мұны істедім және осы қатені аламын: «Order.OrderDate» бағаны ORDER BY сөйлемінде жарамсыз, себебі ол жиынтық функцияда немесе GROUP BY сөйлемінде жоқ.
қосылды автор Bruce, көзі
рахмет, иә ол жұмыс істейді және бұл жағдайда нәтиже айдың нөмірін көрсетпейді :)
қосылды автор Bruce, көзі
иә, бұл үлкен рахмет Райан және Брюс
қосылды автор Bruce, көзі

Жай қосыңыз

Order by max(OrderDate) 

аяқ кезінде.

SELECT     { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year,     SUM(TotalValue) AS Profits
FROM         [Order]
WHERE     (YEAR(OrderDate) = @year)
GROUP BY { fn MONTHNAME(OrderDate) }, YEAR(OrderDate)
Order by max(OrderDate) 

Қазір ол қалай жұмыс істейді:

Егер айға, жылына бөлек тапсырыс берсеңіз, ол айдың алфавиттік тәртіппен (сәуірден бастап сәуір айына дейін) өсу тәртібімен өтеді. Тапсырыс берушінің тапсырыстары бойынша тапсырыстың датасы, әрине, ай/жылмен реттелетін күн мәніне негізделеді.

1
қосылды
thanks, менің жауапты жаңартты .. !!
қосылды автор user2407394, көзі
маған сіздің мақсатыңызға қызмет етеді ме?
қосылды автор user2407394, көзі
Бұл жұмыс істемейді, себебі тәртіп бойынша өріс пунктпен топта болу керек
қосылды автор Bob Vale, көзі
иә ретінде Боб Саид , барлық рахмет :))
қосылды автор Bruce, көзі
рахмет @ user2407394
қосылды автор Bruce, көзі
select 
cast(year(appointmentdate) as char(4))+''+ 
case when len(cast(month(appointmentdate)as char(2)))=1 
then '0'+cast(  month(appointmentdate) as char(2) ) else cast(month(appointmentdate) as char(2))end  as apporder
from timeslots  
group by appointmentdate
order by appOrder
0
қосылды

Сұрауды қолданыңыз, ол сіз үшін жұмыс істейді.

SELECT     { fn MONTHNAME(OrderDate) } AS MonthName, datepart(MM,OrderDate)                     AS Month, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits
FROM         [Order]
WHERE     (YEAR(OrderDate) = @year)
GROUP BY { fn MONTHNAME(OrderDate) }, YEAR(OrderDate),     datepart(MM,**OrderDate**) 
ORDER BY datepart(MM,**OrderDate**)
0
қосылды
Сәлеметсің бе, ОС-ң сіздің түсінігіңізді түсіну үшін жауапыңызды сәл түсіндіре аласыз ба? Өтінемін, өтінемін.
қосылды автор bufh, көзі

Мұны көріңіз. Бұл өте жақсы жұмыс істейді. Жылдық мәнді енгізгеніңізге назар аударыңыз. Сондықтан, Сіз бір жылда бір жыл таңдауға болатындықтан, Сізге Топты тапсырыс немесе топтау қажет емес. Сондықтан қосымша код қажет емес.

SELECT { fn MONTHNAME(OrderDate) } AS MonthName, SUM(TotalValue) AS Profits
FROM [Order]
WHERE (YEAR(OrderDate) = @year)
GROUP BY { fn MONTHNAME(OrderDate) }, DATEPART(M, OrderDate)
ORDER BY DATEPART(M, OrderDate)
0
қосылды