0

カスタム定義の範囲で[価格]フィールドの値の出現回数を選択したい:

私の価格帯は次のとおりです。

< 10  
10-20  
20-50  
> 50  

したがって、価格が3,4,11および20の場合、結果は次のようになります。

< 10 (2)  
10-20 (1)  
21-50 (1)  
> 50 (0) 

テーブルの定義は次のとおりです。

CREATE TABLE [dbo].[products](
[id] [int] IDENTITY(1,1) NOT NULL,
[price] [decimal](8, 0) NULL,
[createdate] [datetime] NOT NULL,
CONSTRAINT [PK_products] PRIMARY KEY CLUSTERED 
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[products] ADD  CONSTRAINT [DF_products_createdate]  DEFAULT (getdate()) FOR [createdate]
GO
4

2 に答える 2

1
With 
Categorized as
(
 Select 
 CASE When Price < 10 Then '<10'
      When Price >= 10 and Price < 20 Then '[10-20)'
      Else '>20'
 END as Category
 From SomeTable
)
Select Category, Count(*) From Categorized
Group By Category

このようなもの。幸運を。

于 2013-02-14T01:26:29.690 に答える
0

あなたはこれを行うことができます。

;WITH Ranges_CTE ([sequence], [range], [lower_limit], [upper_limit]) AS
  (
   SELECT 1,'<10', 0, 9
    UNION
    SELECT 2,'10-20', 10, 19
    UNION
    SELECT 3, '20-50', 20, 50
    UNION
    SELECT 4, '>50', 51, 1000
   )

SELECT r.range, count(p.id) AS ROW_COUNT
FROM ranges_cte r
LEFT OUTER JOIN products p ON p.price BETWEEN r.lower_limit AND r.upper_limit
GROUP BY r.range, r.sequence
ORDER BY r.sequence

範囲があいまいであることに注意してください。あなた20-50は一箇所と21-50他の場所に表示します。データはそれ20-50が正しいことを示しているようです。しかし、その場合、価格20はに収まり10-20ます20-5010-20上限は19だと思いました。

于 2013-02-14T01:32:02.483 に答える