我有一個表客戶和100行。在表中爲活動/非活動客戶設置狀態列。以統一順序選擇行
我想要做的是選擇表中的所有客戶特定的順序 即
前7個活躍客戶,然後3級不活躍的客戶7再次活躍客戶和3個非活動等
如何我可以在查詢中實現這一點嗎?
我正在使用sql server 2008。請幫助我....
我有一個表客戶和100行。在表中爲活動/非活動客戶設置狀態列。以統一順序選擇行
我想要做的是選擇表中的所有客戶特定的順序 即
前7個活躍客戶,然後3級不活躍的客戶7再次活躍客戶和3個非活動等
如何我可以在查詢中實現這一點嗎?
我正在使用sql server 2008。請幫助我....
像這樣的東西應該這樣做,根據您迄今列出的最低要求:
;with NumberedRows as (
select
*, --TODO - pick columns
ROW_NUMBER() OVER(PARTITION BY status ORDER BY PKID) - 1 as rn
from
table
), AlteredOrdering as (
select
*, --TODO - pick columns
CASE
WHEN status = 'active' THEN (10 * (rn/7)) + (rn % 7)
WHEN status = 'inactive' THEN (10 * (rn/3)) + 7 + (rn % 3)
END as FinalOrder
from NumberedRows
)
select * from AlteredOrdering ORDER BY FinalOrder
顯然,根據需要更改表和列名稱。假設PKID
是表格中的某個其他列,可以對其排序單個行。
的幻數在AlteredOrdering CTE是有望明顯 - 來自第7題和第3,並代表應該有多少每個項目的出現在每個「組」。 10是每個「組」的總大小。因此,如果它是9活躍的,4活躍的,CASE表達式看起來像:
WHEN status = 'active' THEN (13 * (rn/9)) + (rn % 9)
WHEN status = 'inactive' THEN (13 * (rn/4)) + 9 + (rn % 4)
據我所知,你不能。它可能會要求你曾經有過的SQL
檢索它,如果你只有100行,那麼也許極限X1的數據的處理,Y結合與工會可以幫助
select * from table where status=active limit 0,7
union
select * from table where status=inactive limit 7,3
union
select * from table where status=active limit 10,7
union
select * from table where status=inactive limit 17,3
...
SQL Server中沒有'限制' –
感謝您的回答。例如,我告訴100,實際上表中可能有數千行 – shibin
除了狀態列之外,您還有另外一列,可以讓您輕鬆區分行嗎? –