SQL Server 2012データベースでは、最後の学年の小学生に「缶詰」メッセージが使用された回数をカウントすることになっています現在の学年t-sql 2012は、期間または期間がないと考えるメッセージを解析します。
次は私が現在使用しているT-SQLである:
Declare @Delimiter char(2) = '. ';
;WITH GetTheComments(Comments) AS
(
SELECT
GS.Comments
FROM
dbo.Enrol Enrol
JOIN
dbo.Student Student ON Student.StudentID = Enrol.StudentID
JOIN
dbo.GS GS ON GS.StudentID = Student.Studentid
AND (GS.Comments IS NOT NULL)
AND (GS.Comments <> '')
WHERE
Enrol.grade IN ('KG', '01', '02', '03', '04', '05', '06')
AND Enrol.endYear BETWEEN 2016 AND 2017
), Pieces (Comments, start, stop) AS
(
SELECT
Comments,
CAST(1 AS BIGINT) AS start,
CAST(CHARINDEX(@Delimiter, Comments) AS BIGINT) AS stop
FROM
GetTheComments
UNION ALL
SELECT
Comments,
CAST(stop + Len(@Delimiter) AS BIGINT) AS start,
CAST(CHARINDEX(@Delimiter, Comments, stop + Len(@Delimiter)) AS BIGINT) AS stop
FROM
Pieces
WHERE
stop > 0
),
EachComment(Comments) AS
(
SELECT
LTrim(SUBSTRING(Comments, start, CASE WHEN stop > 0 THEN stop-start ELSE LEN(Comments) END)) AS Comments
FROM Pieces
)
SELECT
Comments, Count(*) AS Counts
FROM
EachComment
WHERE
Comments <> ''
GROUP BY
Comments
ORDER BY
Counts DESC, Comments ASC;
を1つのGS.Commentsフィールドに複数のメッセージの例は次のようになります。
をこの学生は良いです数学でこの生徒は時間通りに割り当てを変えます。この生徒は学校を楽しんでいるようです。
1つのメッセージが1つのGS.Commentsフィールドにあるときの例では、次のようになります。
をこの学生は、問題がGS.Comments
列がvarchar(1200)
のように定義されている学校
を楽しんでいるようです。列には1つのメッセージがありますが、この列には多数のメッセージが存在する可能性があります。各メッセージはピリオドで終わり、varchar(1200)
列にメッセージが1つ以上ある各メッセージの間にスペースがあります。
メッセージが1つだけの場合、メッセージの後にピリオドはありません。
問題は基本的に期間を持つメッセージのカウントがあると、同じメッセージのための期間がない場合のためにカウントされていない以下の
message count
-----------------------------------------------------
This student seems to enjoy school. 150
This student seems to enjoy school 25
ように見える結果があることができています。
このように、上記のSQLで何ができるのかを私に見せてもらうことができるので、メッセージは同じものとして扱われます。基本的には、上記の1つのメッセージと1つのメッセージが必要です。
SELECT
case when Comments like '%.' then Comments else (Comments + '.') end as Comments
, COUNT(*) AS Counts
FROM EachComment
WHERE Comments <> ''
GROUP BY
case when Comments like '%.' then Comments else (Comments + '.') end
ORDER BY Counts DESC, Comments ASC;
をあなたが真剣にセットアップするためにあなたが言及すべてのテストケースをカバーするいくつかのサンプルデータが必要になります。 –