FormatSQL查询输出到LLM使用的报告文本结构

问题描述 投票:0回答:0

问题:

I有一个查询,列出了以下列:

repid
Car
Model
Fault
cnt
(事件计数)。我查询的当前输出看起来像这样:

Query:

SELECT repid, Car, Model, Fault, COUNT(*) AS cnt FROM Cars GROUP BY repid, Car, Model, Fault ORDER BY repid, Car, Model, COUNT(*) DESC;
电流输出:

repid | Car | Model | Fault | cnt ----------------------------------------------- 1 | Car1 | Model1 | Text1 | 5 1 | Car1 | Model1 | Text2 | 4 1 | Car1 | Model1 | Text3 | 3 1 | Car1 | Model2 | Text4 | 2 1 | Car1 | Model2 | Text5 | 1 2 | Car2 | Model1 | Text6 | 6 2 | Car2 | Model1 | Text7 | 4
我希望输出更像报告,
repid

Car
Model
仅出现一次,每组仅出现一次,其余的行仅显示
Fault
cnt
。例如:
theSiled的输出是每个报告的文本:

Report: RepID 1 ----------------- Car 1 Model 1 Fault1 repeated Cnt1 times Fault2 repeated Cnt2 times Fault3 repeated Cnt3 times Model 2 Fault4 repeated Cnt4 times Fault5 repeated Cnt5 times Car 2 Model 3 Fault6 repeated Cnt6 times Fault7 repeated Cnt7 times Model 4 Fault8 repeated Cnt8 times Fault9 repeated Cnt9 times

如何修改查询以实现此类报告式输出并将其存储在RepStext
中的Reps表中
样本数据:

there是样本

Reps

表:


Repid
repstext1 null null34 null there是样本Cars Repid
2
null
表:
car

模型
FAULT

text11car1Model1car1 text31car1Model2Model2 text52car2Model1 text6 text7我尝试过的是:ROW_NUMBER()CASE表达式来隐藏repidCarModel这部分有效,但没有给我我想要的东西。是否有更好的方法将SQL查询结果格式化以实现此报告式输出? 任何帮助将不胜感激!谢谢!
1 car1 Model1
text2 1
Model1
text4 1 car1
2 car2 Model1
我尝试使用
的重复值,但是我正在努力地完全按照我的意愿获取输出。这是使用CTE的一次尝试: WITH RankedData AS ( SELECT repid, Car, Model, Fault, COUNT(*) AS cnt, ROW_NUMBER() OVER (PARTITION BY repid, Car, Model ORDER BY COUNT(*) DESC) AS row_num FROM Cars GROUP BY repid, Car, Model, Fault ) SELECT CASE WHEN row_num = 1 THEN CAST(repid AS VARCHAR) ELSE '' END AS RepID, CASE WHEN row_num = 1 THEN Car ELSE '' END AS Car, CASE WHEN row_num = 1 THEN Model ELSE '' END AS Model, Fault AS Fault, cnt AS Count FROM RankedData ORDER BY repid, Car, Model, cnt DESC;

我不知道您想在SQL而不是在您的应用程序中这样做。

但是可以通过使用

GROUPING SETS

和某些条件来完成。 
GROUPING()
函数将返回1如果列进行了汇总,则否则为0。由于您想在最终分组中重复排行的行数,因此不完全分组的行更有意义,因此我们将PK添加到最终的分组集中。
SELECT repid, Car, Model, Fault, COUNT(*) AS cnt CASE WHEN GROUPING(Car) = 1 THEN CONCAT('Report: RepID -----------------', repid) WHEN GROUPING(Model) = 1 THEN CONCAT('Car ', Car) WHEN GROUPING(Fault) = 1 THEN CONCAT(' Model ', Model) ELSE CONCAT(' ', Fault) END FROM Cars GROUP BY GROUPING SETS ( (repid), (repid, Car), (repid, Car, Model), (repid, Car, Model, Fault, YourPrimaryKey) ) ORDER BY repid, GROUPING(Car) DESC, Car, GROUPING(Model) DESC, Model, GROUPING(Fault) DESC, COUNT(*) OVER (PARTITION BY repid, Car, Model, Fault) DESC;
    

sql sql-server t-sql sql-update
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.