這是我最好的猜測,你需要什麼。我認爲它至少能完成你所要求的。從我得到的,你想按地區,然後建立類型。在每個組中,您需要建築類型每月銷售的最大金額以及銷售價格的百分比。 「據我所知,」出售價格的百分比「是完全不明確的(除非我錯過了某些東西),所以我認爲這是指某個特定地區的特定建築類型在該月份爲該組銷售的百分比。如果這些假設的任何一部分都是錯誤的,就這樣說。以下是我得到的結果:
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
樣本數據都是針對一個區域的,但它應該對很多人都適用。它也可以修改爲按區域工作並取出建築物類型分組。希望有所幫助。
「銷售價格百分比」是什麼意思? – GolezTrol 2011-01-24 19:36:09
[SQL查詢可以給我房子銷售的百分比(%)?]的可能的重複項(http://stackoverflow.com/questions/4785231/what-sql-query-would-give-me-the-percentage售出) – ErikE 2011-01-25 01:37:58