通过添加偏差值作为新列来合并行

发布于 2025-02-13 20:30:21 字数 4594 浏览 0 评论 0原文

我想为每个填写特定调查表的人以及来自特定问卷/评估的数据输出。这些值存储在表格标准中。

The result of my current query:

KlientIdName1Name2CriteriaNameResult
335Name1Person1Name2Person1IF1Yes
335Name1Person1Name2Person1IF2Yes
335Name1Person1Name2Person1IF3No
336Name1Person2Name2Person2IF1Yes
336Name1Person2Name2Person2IF2Yes
336Name1Person2Name2Person2IF3No

What 拥有:

klientidname1name2if1 if2if2if3 if3
person2name1person1name1person1name2是是否336
person2name2person2name2是否所以我想

标准应该得到自己的列,而引用同一个人的行应该基于同一klientid。 我用来获得我当前结果的查询使用了一些加入,以便从人到客户,并在评估到标准的过程中,在该标准中,Criterianame和Result所处的位置。其他表仅与外国键一起使用,以获取这些值“ if1:yes”等。

SELECT Client.Id, Person.Name1, Person.Name2, Person.Birthday, CriteriaDF.CriteriaName, CriteriaDF.Result
FROM Client
INNER JOIN Person ON Client.PersonId=Person.Id
INNER JOIN Process ON Client.Id=Process.ClientId
INNER JOIN AssessmentDF ON Process.Id=AssessmentDF.ProCessId
INNER JOIN CriteriaDF ON AssessmentDF.Id=CriteriaDF.AssessmentDfId
WHERE AssessmentDF.Name='RightAssessmentName' AND AssessmentDF.Date > DATEADD(day, -180, GETDATE())

编辑:使用别名查询:

SELECT t1.Id, t2.Name1, t2.Name2, t2.Birthday, t5.CriteriaName, t5.Result
FROM Client AS t1
INNER JOIN Person AS t2 ON t1.PersonId=t2.Id
INNER JOIN Process AS t3 ON t1.Id=t3.ClientId
INNER JOIN AssessmentDF AS t4 ON t3.Id=t4.ProcessId
INNER JOIN CriteriaDF AS t5 ON t4.Id=t5.AssessmentDfId
WHERE t4.Bezeichnung='RightAssessmentName' AND t4.Date > DATEADD(day, -180, GETDATE())

我的主要问题是如何转换元组criterianame&结果是每个唯一criterianame的新列,并用结果填充单元格。

我不认为它们很重要,但是这里都是用来从人到标准的最小表):

餐桌人员:

IDNAME1NAME2
2766PENSIC1NAME1PERMAN1NAME2
2767PERMAN2NAME2person2Name2 NAME2
2768Person3Name2 person3name2person3name2

table klient:

idpersyid
12766
3352767
3362768

IDKlientid
2485335
2515336
2519336

IDProcessID日期名称
4324852022-04-18RightAssessmentName
44流程destmentdf
25152022-05-18评估名称

表 In reality there is IF1-If19

IdAssessmentDfIdCriteriaNameProcessIdResult
55143IF12485Yes
55243IF22485Yes
55343IF32485No
55444IF12515Yes
55544IF22515Yes
55644IF32515No
55745IF12519Yes
55845IF22519
55945IF32519

I want to output for each person that has filled out a specific questionnaire their personal data as well as the data from the specific questionnaire/assessment. The values are stored in the table criteriaDF.

The result of my current query:

KlientIdName1Name2CriteriaNameResult
335Name1Person1Name2Person1IF1Yes
335Name1Person1Name2Person1IF2Yes
335Name1Person1Name2Person1IF3No
336Name1Person2Name2Person2IF1Yes
336Name1Person2Name2Person2IF2Yes
336Name1Person2Name2Person2IF3No

What I want to have:

KlientIdName1Name2IF1IF2IF3
335Person1Name1Person1Name2YesYesNo
336Person2Name1Person2Name2YesNoNo

So the criterias should get their own columns and the rows referencing the same person should merge into one based on the same KlientId.
The query I used to get my current result uses a few joins in order to get from person to client, to process to assessment to criteria, where the CriteriaName and Result lies. The other tables are just used with their foreign keys to get to these values "IF1: Yes" etc.

SELECT Client.Id, Person.Name1, Person.Name2, Person.Birthday, CriteriaDF.CriteriaName, CriteriaDF.Result
FROM Client
INNER JOIN Person ON Client.PersonId=Person.Id
INNER JOIN Process ON Client.Id=Process.ClientId
INNER JOIN AssessmentDF ON Process.Id=AssessmentDF.ProCessId
INNER JOIN CriteriaDF ON AssessmentDF.Id=CriteriaDF.AssessmentDfId
WHERE AssessmentDF.Name='RightAssessmentName' AND AssessmentDF.Date > DATEADD(day, -180, GETDATE())

Edit: Query using aliases:

SELECT t1.Id, t2.Name1, t2.Name2, t2.Birthday, t5.CriteriaName, t5.Result
FROM Client AS t1
INNER JOIN Person AS t2 ON t1.PersonId=t2.Id
INNER JOIN Process AS t3 ON t1.Id=t3.ClientId
INNER JOIN AssessmentDF AS t4 ON t3.Id=t4.ProcessId
INNER JOIN CriteriaDF AS t5 ON t4.Id=t5.AssessmentDfId
WHERE t4.Bezeichnung='RightAssessmentName' AND t4.Date > DATEADD(day, -180, GETDATE())

My main question is how to convert the tuples CriteriaName & Result to a new column for each unique CriteriaName and Fill the cell with the Result.

I dont think they're important, but here are all minimal tables that are used to get from the person to the criterias (Ids might not fit perfectly to the result & what I wanted to have, just to understand how the data is stored):

Table Person:

IdName1Name2
2766Person1Name1Person1Name2
2767Person2Name2Person2Name2
2768Person3Name2Person3Name2

Table Klient:

IdPersonId
12766
3352767
3362768

Table Process:

IdKlientId
2485335
2515336
2519336

Table AssessmentDF

IdProcessIdDateName
4324852022-04-18RightAssessmentName
4425152022-05-18RightAssessmentName
4525192022-06-18RightAssessmentName

Table CriteriaDF:
In reality there is IF1-If19

IdAssessmentDfIdCriteriaNameProcessIdResult
55143IF12485Yes
55243IF22485Yes
55343IF32485No
55444IF12515Yes
55544IF22515Yes
55644IF32515No
55745IF12519Yes
55845IF22519No
55945IF32519No

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文