我需要列出计数数据和基于“速率”值的两个表格。
费率表
id rate ratevale
-------------------------
1 N NA
2 D DH
3 F FA
4 L LD
索赔表
id rate
1 N
2 N
3 N
4 F
5 N
6 D
7 D
8 F
9 L
我需要列出以下结果
id Generate
1 NA-40-001
2 NA-40-002
3 NA-40-003
4 FA-40-001
5 NA-40-004
6 DH-40-001
7 DH-40-002
8 FA-40-002
9 LD-40-001
我按照
进行了查询$query="select count(Claim.rate) as count,Rate.ratevale from Claim leftjoin Rate on Claim.rate=Rate.rate group by Claim.rate";
显示每个“费率和费率值”的计数,如下所示
NA->4
FA->2
DH->2
LD->1
但我需要如何列出格式以上的数据。
答案 0 :(得分:0)
试用此代码:
$query="SELECT COUNT( Claim.rate ) AS count, Rate.ratevale
FROM claim
LEFT JOIN rate ON Claim.rate = Rate.rate
GROUP BY Claim.rate" ;
使用Order By
$query = "SELECT COUNT( claim.rate ) AS count, rate.ratevale
FROM claim
LEFT JOIN rate ON claim.rate = rate.rate
GROUP BY claim.rate
ORDER BY count DESC" ;
答案 1 :(得分:0)
使用表格
CREATE TABLE ctab (id int,rate varchar(1)); -- claims table
INSERT INTO ctab (id,rate) VALUES
(1, 'N'),(2, 'N'),(3, 'N'),(4, 'F'),(5, 'N'),
(6, 'D'),(7, 'D'),(8, 'F'),(9, 'L');
CREATE TABLE rtab(id int,rate varchar(1), ratevale varchar(2));
INSERT INTO rtab (id,rate,ratevale) VALUES -- rates table
(1, 'N', 'NA'),(2, 'D', 'DH'),(3, 'F', 'FA'),(4, 'L', 'LD');
我们可以做到以下几点:
SELECT t.id, CONCAT(ratevale,'-40-',RIGHT(CAST(i+1000 as char(4)),3)) rval
FROM (
SELECT CASE WHEN @r =rate THEN @i:=@i+1 ELSE @i:= 1 END i,
CASE WHEN @r!=rate THEN @r:=rate ELSE @r END r,
id id,rate rate
FROM (SELECT @i:=1,@r:='') v, ctab c
ORDER BY rate,id
) t
INNER JOIN rtab r ON r.rate=t.rate
ORDER BY id
我们得到:
| id | rval |
|----|-----------|
| 1 | NA-40-001 |
| 2 | NA-40-002 |
| 3 | NA-40-003 |
| 4 | FA-40-001 |
| 5 | NA-40-004 |
| 6 | DH-40-001 |
| 7 | DH-40-002 |
| 8 | FA-40-002 |
| 9 | LD-40-001 |
在此处使用它:http://sqlfiddle.com/#!9/d9e3e/15
基本思路是我们列出声明表,按rate
排序并将其转换为派生表t
。
在派生表@i
中初始化1
至@r
和''
至v
,我们会检查@r=rate
和
@i
。ELSE
)我们将@i
重置为1
,将@r
重置为rate
。
这发生在第二个CASE
子句中。我们最终得到一个序列列i
,它开始计算rate
的每个值。在外部SELECT
语句中,派生表t
随后会加到费率表rtab
,并应用不同的排序顺序。
请注意:
此解决方案也可视为ROW_NUMBER() in MySQL的替代解决方案。上面的MySQL查询可以通过应用row_number() over (partition...)
轻松地在MSSQL中重写,请参见此处:http://sqlfiddle.com/#!3/d9e3e/8