编写sql查询的问题

Posted

技术标签:

【中文标题】编写sql查询的问题【英文标题】:problem in writing a sql query 【发布时间】:2010-10-18 20:17:01 【问题描述】:

在编写 sql 查询时遇到问题。 两张表:

第一个:创建了患者表第二个:已经创建了文档表 patientid 患者姓名 docid 工作状态 docid docname 1 aaa 2 10 1 ggg 2 bbb 2 20 2 hhh 3 cc 1 10 3 iii 4 天 3 10 5 EE 3 20 6 ff 2 10

预期输出:

文档名 工作状态(10) 工作状态(20) ggg 1 0 哈哈 2 1 三 1 1

也可以在查询之间使用临时表

提前致谢

【问题讨论】:

如果您希望有人阅读或回复,请格式化。 如果我有编辑能力,我会将表格编辑成看起来像表格。 @satwik,你能帮忙吗? 正确格式化并避免使用快捷方式 (pblm)。在发布问题之前请参考这些指南:tinyurl.com/so-hints BTW 患者姓名是一个极差的列选择。当您想要按姓氏、名字(最常见的名称排序选择)按字母顺序对报表中的名称进行排序时会发生什么情况。您将在此列中得到垃圾,例如 John Smith and Smith、John or Smith、John, IV 或 JOhn Smith III,或 Smith IV, John,您将无法以任何一致的格式显示数据。始终将所有名称存储在单独的名字、中间名、姓氏和后缀字段中。 【参考方案1】:

试试这个

完整的工作示例

declare @patient as table(
patientID int IDENTITY(1,1) NOT NULL,
patientName varchar(25),
docID int,
workstatus smallint
)

declare @doc as table(
docID int IDENTITY(1,1) NOT NULL,
docname varchar(25)
)

insert into @patient
select 'aaa', 2, 10
union all
select 'bbb', 2, 20
union all
select 'ccc', 1, 10
union all
select 'ddd', 3, 10
union all
select 'eee', 3, 20
union all
select 'fff', 2, 10


insert into @doc
select 'ggg'
union all
select 'hhh'
union all
select 'iii'

select docname, 
      SUM(case when t1.workstatus = 10 THEN 1 ELSE 0 END) as [workstatus(10)],
      SUM(case when t1.workstatus = 20 THEN 1 ELSE 0 END) as [workstatus(20)] 
    from @patient t1
    inner join @doc t2 on t1.docid=t2.docid
    GROUP BY docname

【讨论】:

感谢您的帮助,但它在工作状态列中没有显示任何内容 嗯。我可以查看您的确切查询吗? 我刚得到这么多,我要求得到如上所示的输出,他们要求我使用临时表 创建表患者(患者 ID、患者姓名、医生 ID、工作流程状态)1 'john' 2 400 2 'steve' 2 370 3 'dave' 1 400 4 'yyyy' 3 400 5 'zzzz' 3 370 6 'dddd' 2 400 创建表 Doctor(doctorid,doctorname)。 1 'ravi' 2 'kkk' 3 'ttt' 编写查询以显示医生姓名,totalpatientcount(workflowstatus=400),totalpatientcount(workflowstatus=370) 预期输出:'llll',1,0 'kkk',2,1' ttt',1,1 线索:尝试考虑在查询之间使用临时表 这看起来像家庭作业。我不确定您的教授所说的“尝试考虑使用临时表”是什么意思。如果回答对你学习有帮助,请标记为正确!【参考方案2】:
Select  d.docname, 
        SUM(case when c.workstatus = 10 THEN 1 ELSE 0 END) as [WorkStatus(10)],
        SUM(case when c.workstatus = 20 THEN 1 ELSE 0 END) as [WorkStatus(20)] 
from created_patient_table c
inner join already_created_doc_table d on c.docid=d.docid
group by d.docid,d.docname

【讨论】:

以上是关于编写sql查询的问题的主要内容,如果未能解决你的问题,请参考以下文章

为报告编写 SQL 查询有何不同?

SQL:在 SQL 中编写嵌套查询 [关闭]

如何使用sql编写查询语句 用于查询学生的 各科成绩

为音乐数据库编写 SQL 查询 [关闭]

在 SQL 表上使用 pyspark 编写 where 查询

编写 SQL 查询工作台