我2012年的MS-SQL服務器上運行,並有其他領域與年齡表USER,性別和銷售表的銷售記錄。TSQL計算各種%,基於不同的領域
我目前在計算銷售排行榜顯示,從而來舉個例子返回此列表根據他們的頂級銷售各種銷售代表通過他們的頂級銷售下令銷售人員的名單。某處在列表的中間,我們有托馬斯先生這讓我們說是#4。
我現在的任務是要顯示托馬斯如何比較具有相同年齡的他,銷售人員他還如何與銷售代表有相同性別作爲他進行比較。該計算將返回與上述總體列表不同的結果。
我理想中的存儲過程將接受1個參數(用戶ID),並返回下面的單個記錄 值:OverallPosition,OverallPositionTotalCount,AgePosition,AgeTotalCount,GenderPosition,GenderTotalCount
數據樣本:
CREATE TABLE dbo.User
(
UserId int NOT NULL IDENTITY (1, 1),
Name nvarchar(50) NOT NULL,
Age int NULL,
Gender nvarchar(10) NULL
)
1, James, 30, 'male'
2, Monica, 27, 'female'
3, Paul, 30, 'male'
4, Thomas, 30, 'male'
5, Mike, 22, 'male'
6, Sabrina, 30, 'female'
CREATE TABLE dbo.Sales
(
SalesId int NOT NULL IDENTITY (1, 1),
UserId int NOT NULL,
TotalSale int NOT NULL
) ON [PRIMARY]
1, 1, $900,000
2, 1, $1,000,000
3, 2, $900,000
4, 2, $400,000
5, 3, $750,000
6, 3, $300,000
7, 4, $875,000
8, 5, $700,000
9, 5, $1,200,000
10, 6, $850,000
銷售排行榜名單
SELECT u.UserId, u.Name, MAX(s.TotalSale) as TopSale, Count(*) OVER() AS TotalCount
FROM User u
INNER JOIN Sales s on s.UserId = u.UserId
GROUP BY u.UserID, u.Name
ORDER BY TopSale DESC
OFFSET (@PageIndexSelected) * @PageCountSelected ROWS
FETCH NEXT @PageCountSelected ROWS ONLY
理想的計算結果
由於托馬斯(用戶ID 4)年齡30和「男性」,他的數據應該是這樣的
OverallPosition = 4; OverallPositionTotalCount = 6 (i.e 4 out of 6)
$1,200,000 Mike
$1,000,000 James
$900,000 Monica
$875,000 Thomas
$850,000 Sabrina
$750,000 Paul
AgePosition = 2; AgeTotalCount = 4 (i.e. 2 out of 4)
$1,000,000 James
$875,000 Thomas
$850,000 Sabrina
$750,000 Paul
GenderPosition = 3; GenderTotalCount = 4 (i.e 3 out of 4)
$1,200,000 Mike
$1,000,000 James
$875,000 Thomas
$750,000 Paul
注意
預期的結果是隻對OverallPosition值,OverallPositionTotalCount,AgePosition,AgeTotalCount,GenderPosition,GenderTotalCount爲單個用戶(存儲過程將接收的用戶ID爲PARAM),而不是實際列表。
預期回報
OverallPosition = 4,
OverallPositionTotalCount = 6,
AgePosition = 2,
AgeTotalCount = 4,
GenderPosition = 3,
GenderTotalCount = 4
正如我所說在我的評論中,我真的不知道如何解決這個問題。我希望有人願意幫助!
你能後,你有這麼遠的代碼? – Kermit
我沒有任何代碼,因爲我不知道如何處理這個問題。這就是我發佈這個問題的原因。順便說一句,你是誰點擊-1? –
是的。一旦您通過嘗試或研究工作更新了您的問題,我會將其刪除。 – Kermit