我试图通过不同的状态明智地获取状态百分比,我们有4种状态。 这是下面“列”的数据。
MR_ID Sup_ID Status
1 1 Rejected
1 1 Accepted
1 1 Accepted
1 1 Rejected
2 2 InProgress
2 2 InProgress
2 2 Accepted
2 2 Fordwarded
对于MR_ID:1和Sup_ID:1组合,“已接受”的百分比为50%,“已拒绝”的百分比为50%
需要编写sql查询或存储过程才能在sql服务器中找到它
没有任何线索。
答案 0 :(得分:1)
您要按语句查找一个简单的分组:
SELECT
MR_ID,
Sup_ID,
(CAST(SUM(CASE WHEN [Status] ='InProgress' THEN 1 ELSE 0 END) AS FLOAT) / CAST(COUNT(*) AS FLOAT)) * 100 'InProgress',
(CAST(SUM(CASE WHEN [Status] ='Fordwarded' THEN 1 ELSE 0 END) AS FLOAT) / CAST(COUNT(*) AS FLOAT)) * 100 'Fordwarded',
(CAST(SUM(CASE WHEN [Status] ='Accepted' THEN 1 ELSE 0 END) AS FLOAT) / CAST(COUNT(*) AS FLOAT)) * 100 'Accepted',
(CAST(SUM(CASE WHEN [Status] ='Rejected' THEN 1 ELSE 0 END) AS FLOAT) / CAST(COUNT(*) AS FLOAT)) * 100 'Rejected'
FROM
@Table1 t
GROUP BY
MR_ID,
Sup_ID
结果:
答案 1 :(得分:0)
以下查询应执行您想要的操作,解决方案适用于SQL Server:
CREATE TABLE #temp (MR_ID INT, Sup_ID INT, [Status] VARCHAR(20))
INSERT INTO #temp VALUES
(1,1,'Rejected'),
(1,1,'Accepted'),
(1,1,'Accepted'),
(1,1,'Rejected'),
(2,2,'InProgress'),
(2,2,'InProgress'),
(2,2,'Accepted'),
(2,2,'Fordwarded')
SELECT t.MR_ID, t.Sup_ID, t.[Status], (COUNT(t.[Status]) * 100 / (SELECT COUNT(*) FROM #temp WHERE MR_ID = t.MR_ID AND Sup_ID = t.Sup_ID )) AS [Percentage]
FROM #temp t
GROUP BY MR_ID, Sup_ID, [Status]
结果如下,
MR_ID Sup_ID Status Percentage
1 1 Accepted 50
1 1 Rejected 50
2 2 Accepted 25
2 2 Fordwarded 25
2 2 InProgress 50
答案 2 :(得分:0)
msql的方式,别帮忙
SELECT
MR_ID mrId,
`Status` `Status`,
count(DISTINCT `Status`) / count(*) * 100 per
FROM
xxx
GROUP BY
mrId, `Status`[enter image description here][1]
答案 3 :(得分:0)
您可以尝试以下方法:
CREATE TABLE TMP_PERC(
FIELD1 INT NOT NULL
, FIELD2 INT NOT NULL
, DESCR VARCHAR (100) NOT NULL
)
INSERT INTO TMP_PERC VALUES(1, 1, 'Rejected');
INSERT INTO TMP_PERC VALUES(1, 1, 'Accepted');
INSERT INTO TMP_PERC VALUES(1, 1, 'Accepted');
INSERT INTO TMP_PERC VALUES(1, 1, 'Rejected');
INSERT INTO TMP_PERC VALUES(2, 2, 'InProgress');
INSERT INTO TMP_PERC VALUES(2, 2, 'InProgress');
INSERT INTO TMP_PERC VALUES(2, 2, 'Accepted');
INSERT INTO TMP_PERC VALUES(2, 2, 'Fordwarded');
SELECT FD.FIELD1
, FD.FIELD2
, FD.DESCR
, CAST(FD.TOTAL_DESCR AS FLOAT) / CAST(FC.TOTAL AS FLOAT) * 100 AS PERC
FROM
(
SELECT FIELD1
, FIELD2
, DESCR
, COUNT(*) AS TOTAL_DESCR
FROM TMP_PERC TP_DECSCR
GROUP BY FIELD1
, FIELD2
, DESCR
) FD
INNER JOIN
(
SELECT FIELD1
, FIELD2
, COUNT(*) AS TOTAL
FROM TMP_PERC
GROUP BY FIELD1
, FIELD2
) FC
ON FD.FIELD1 = FC.FIELD1
AND FD.FIELD2 = FC.FIELD2
;
答案 4 :(得分:0)
我会简单地做:
response()->json()
如果要在单独的行而不是列中使用值,请使用窗口函数:
divs
这些查询是标准SQL,应在SQL Server和Oracle中都可以使用。