0

これら2つのクエリを組み合わせて、パーセンテージ値を生成しようとしました。

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, regdate)) AS rdate, 
       COUNT(*) as sum 
FROM TBL where regdate > '2013-02-21' 
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, regdate)) 
ORDER BY rdate DESC 

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, slutdatum)) AS sdate, 
       COUNT(*) as sum 
FROM TBL 
WHERE slutdatum > '2013-02-21' 
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, slutdatum))       
ORDER BY sdate DESC

しかし、私は本当にそれを理解していません。以下に示すように試しましたが、エラーが発生するだけで、2つのクエリはそれ自体で機能します。(クエリを分離して実行し、値を取得した後に計算を実行することはできますが、それは継ぎ目だけでそれをやり過ぎます)。

SELECT (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, regdate)) AS rdate, count(*) as sum 
        FROM TBL where regdate > '2013-02-21' 
        GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, regdate)) 
        ORDER BY rdate DESC) / (select DATEADD(dd, 0, DATEDIFF(dd, 0, slutdatum)) AS sdate,    
COUNT(*) as sum from TBL where slutdatum > '2013-02-21' 
GROUP BY DATEADD(dd, 0,    
DATEDIFF(dd, 0, slutdatum)) ORDER BY sdate DESC) * 100 from tbl

過去7日間の日付とパーセンテージの2つの列を生成する1つのクエリを作成するにはどうすればよいですか?

4

2 に答える 2

1

同じ日に発生するイベントを比較するため、その日に参加することはできますが、休憩FULL OUTER JOINのみまたは修正のみがあった日を含める必要があります。

更新されたコードは次のとおりです。

SELECT COALESCE(reg.rdate,cl.sdate) as [Date], ISNULL(reg.sum, 0) as [Registered], ISNULL(cl.sum, 0) as [Closed], 
       CASE WHEN cl.sum IS NULL THEN 0
            WHEN ISNULL(cl.sum,0) > ISNULL(reg.sum,0) THEN 100 
            ELSE CONVERT(float,cl.sum)/reg.sum*100 END as [Percentage]  
FROM 

(SELECT regdate AS rdate, COUNT(regdate) as sum 
FROM TBL where regdate > CONVERT(datetime,'20130221',112) 
GROUP BY regdate ) reg 

FULL OUTER JOIN 

(SELECT slutdatum AS sdate, COUNT(slutdatum) as sum 
FROM TBL WHERE slutdatum > CONVERT(datetime,'20130221',112)
GROUP BY slutdatum) cl

ON (reg.rdate=cl.sdate)
ORDER BY COALESCE(reg.rdate,cl.sdate);

テストデータを使用してSQLFiddleを作成したので、コードを試すことができます: http ://sqlfiddle.com/#!3/58a33/1 。

于 2013-03-01T23:48:40.007 に答える
0

テーブルのように(SELECT ...)を使用できます。したがって、SELECT ... FROM(SELECT ...)をAとして、(SELECT ...)をBとして試してください。

これで、AとBの値を同じ式で使用できます。

于 2013-03-01T23:12:03.213 に答える