2011-01-24 48 views
0

我需要在List Price查詢的最大Sold Price每個AreaBuilding TypeMonth在標價最高soldprice的百分比。查詢爲每個組

例如,我們有一個房地產,我們想找到:

在「區」,每賣出Month什麼樣的Building TypeSold Price的最大和百分比是多少?

MLS No. Area List Price Contract Price Sold Date Sold Building Type 
N1959472 N11 329500  20/09/2010 317000  13/11/2010 Semi-Detac 
N1990464 N11 339000  08/11/2010 340000  17/11/2010 Apt 
+0

「銷售價格百分比」是什麼意思? – GolezTrol 2011-01-24 19:36:09

+0

[SQL查詢可以給我房子銷售的百分比(%)?]的可能的重複項(http://stackoverflow.com/questions/4785231/what-sql-query-would-give-me-the-percentage售出) – ErikE 2011-01-25 01:37:58

回答

0

目前尚不清楚'百分比'是什麼意思,但我會告訴你如何按月分組以獲得最高價格。百分比也可能是一個集結,你可以稍後添加。

select 
    Area, 
    HouseType, 
    max(PriceSold) as MaxPriceSold 
from 
    YourTable 
group by 
    Area, 
    HouseType, 
    Year(DateSold), 
    Month(DateSold) 
+0

也許,它應該是MAX(PriceSold)超過MAX(ListPrice)的百分比,根據您的解決方案。只是一個猜測,它是基於OP的另一個問題,但似乎是有道理的。 – 2011-01-24 21:47:23

0

這是我最好的猜測,你需要什麼。我認爲它至少能完成你所要求的。從我得到的,你想按地區,然後建立類型。在每個組中,您需要建築類型每月銷售的最大金額以及銷售價格的百分比。 「據我所知,」出售價格的百分比「是完全不明確的(除非我錯過了某些東西),所以我認爲這是指某個特定地區的特定建築類型在該月份爲該組銷售的百分比。如果這些假設的任何一部分都是錯誤的,就這樣說。以下是我得到的結果:

DECLARE @RealEstate TABLE 
(
    MLSNo CHAR(8) 
    , Area CHAR(3) 
    , ListPrice INT 
    , [Contract] DATE 
    , PriceSold INT 
    , DateSold DATE 
    , BuildingType VARCHAR(50) 
); 

INSERT @RealEstate 
VALUES ('N1959472', 'N11', 329500, '20100920', 329500, '20100920', 'Semi-Detac') 
, ('N1990464', 'N11', 339000, '20101108', 339000, '20101108', 'Apt') 
, ('N1990465', 'N11', 331350, '20101124', 331350, '20101124', 'Apt') 
, ('N1990465', 'N11', 359840, '20100313', 359840, '20100313', 'Detac') 
, ('N1990465', 'N11', 351230, '20100320', 351230, '20100320', 'Other Building') 
, ('N1990468', 'N11', 376590, '20100328', 376590, '20100328', 'Outhouse') 
, ('N1990468', 'N11', 374838, '20100315', 374838, '20100315', 'Detac') 
, ('N1990469', 'N11', 351976, '20100328', 351976, '20100328', 'Detac') 
, ('N1990470', 'N11', 348901, '20100303', 348901, '20100303', 'Other Building') 
, ('N1990471', 'N11', 101685, '20100516', 101685, '20100516', 'Other Building') 
, ('N1990472', 'N11', 359875, '20100909', 359875, '20100909', 'Apt'); 


DECLARE @Year INT = 2010; 

WITH Aggregated AS 
(
    SELECT 
     Area 
     , BuildingType 
     , DATENAME(MONTH, DateSold) AS NameOfMonth 
     , PriceSold 
     --, MAX(PriceSold) OVER(PARTITION BY Area, BuildingType, DATENAME(MONTH, DateSold)) AS MaxForMonth 
     , CAST((CAST(PriceSold AS DECIMAL)/(SUM(PriceSold) OVER(PARTITION BY Area, DATENAME(MONTH, DateSold))) * 100) AS INT) AS PercentageOfPriceSold 
    FROM @RealEstate 
    WHERE YEAR(DateSold) = @Year 
) 
, PivotedMax AS 
(
    SELECT 
     Area 
     , BuildingType 
     , ISNULL(January, 0) AS MaxSoldInJanuary 
     , ISNULL(February, 0) AS MaxSoldInFebruary 
     , ISNULL(March, 0) AS MaxSoldInMarch 
     , ISNULL(April, 0) AS MaxSoldInApril 
     , ISNULL(May, 0) AS MaxSoldInMay 
     , ISNULL(June, 0) AS MaxSoldInJune 
     , ISNULL(July, 0) AS MaxSoldInJuly 
     , ISNULL(August, 0) AS MaxSoldInAugust 
     , ISNULL(September, 0) AS MaxSoldInSeptember 
     , ISNULL(October, 0) AS MaxSoldInOctober 
     , ISNULL(November, 0) AS MaxSoldInNovember 
     , ISNULL(December, 0) AS MaxSoldInDecember 
    FROM Aggregated 
    PIVOT 
    (
     MAX(PriceSold) 
     FOR NameOfMonth IN 
     (
      [January] 
      , [February] 
      , [March] 
      , [April] 
      , [May] 
      , [June] 
      , [July] 
      , [August] 
      , [September] 
      , [October] 
      , [November] 
      , [December] 
     ) 
    ) Pivoted 
) 
, PivotedPercent AS 
(
    SELECT 
     Area 
     , BuildingType 
     , ISNULL(January, 0) AS PercentageOfSalesInJanuary 
     , ISNULL(February, 0) AS PercentageOfSalesInFebruary 
     , ISNULL(March, 0) AS PercentageOfSalesInMarch 
     , ISNULL(April, 0) AS PercentageOfSalesInApril 
     , ISNULL(May, 0) AS PercentageOfSalesInMay 
     , ISNULL(June, 0) AS PercentageOfSalesInJune 
     , ISNULL(July, 0) AS PercentageOfSalesInJuly 
     , ISNULL(August, 0) AS PercentageOfSalesInAugust 
     , ISNULL(September, 0) AS PercentageOfSalesInSeptember 
     , ISNULL(October, 0) AS PercentageOfSalesInOctober 
     , ISNULL(November, 0) AS PercentageOfSalesInNovember 
     , ISNULL(December, 0) AS PercentageOfSalesInDecember 
    FROM Aggregated 
    PIVOT 
    (
     MAX(PercentageOfPriceSold) 
     FOR NameOfMonth IN 
     (
      [January] 
      , [February] 
      , [March] 
      , [April] 
      , [May] 
      , [June] 
      , [July] 
      , [August] 
      , [September] 
      , [October] 
      , [November] 
      , [December] 
     ) 
    ) Pivoted 
) 
SELECT 
    PivotedMax.Area 
    , PivotedPercent.BuildingType 
    , PivotedMax.MaxSoldInJanuary 
    , PivotedPercent.PercentageOfSalesInJanuary 
    , PivotedMax.MaxSoldInFebruary 
    , PivotedPercent.PercentageOfSalesInFebruary 
    , PivotedMax.MaxSoldInJanuary 
    , PivotedPercent.PercentageOfSalesInMarch 
    , PivotedMax.MaxSoldInMarch 
    , PivotedPercent.PercentageOfSalesInApril 
    , PivotedMax.MaxSoldInApril 
    , PivotedPercent.PercentageOfSalesInMay 
    , PivotedMax.MaxSoldInMay 
    , PivotedPercent.PercentageOfSalesInJune 
    , PivotedMax.MaxSoldInJune 
    , PivotedPercent.PercentageOfSalesInAugust 
    , PivotedMax.MaxSoldInAugust 
    , PivotedPercent.PercentageOfSalesInSeptember 
    , PivotedMax.MaxSoldInSeptember 
    , PivotedPercent.PercentageOfSalesInOctober 
    , PivotedMax.MaxSoldInOctober 
    , PivotedPercent.PercentageOfSalesInJanuary 
    , PivotedMax.MaxSoldInNovember 
    , PivotedPercent.PercentageOfSalesInNovember 
    , PivotedMax.MaxSoldInDecember 
    , PivotedPercent.PercentageOfSalesInDecember 
FROM PivotedMax 
INNER JOIN PivotedPercent 
    ON PivotedPercent.Area = PivotedMax.Area 
     AND PivotedPercent.BuildingType = PivotedMax.BuildingType 

樣本數據都是針對一個區域的,但它應該對很多人都適用。它也可以修改爲按區域工作並取出建築物類型分組。希望有所幫助。