SQL问题求解决

pingo888 2006-12-28 05:45:52
table1
ID ListID ListName
1 TL1 方案1
2 TL2 报告

table2
ID PK_ListID TypeID Date
1 TL1 1 2006-1-1
2 TL1 2 2006-1-2
3 TL1 3 2006-1-3
4 TL2 1 2006-2-1
5 TL2 2 2006-2-2
说明:TypeID为“操作类别”,1为填写,2为审核,3为审批,分别对应操作的日期Date

想得到结果:
ListName 填写日期 审核日期 审批日期
方案1 2006-1-1 2006-1-2 2006-1-3
报告 2006-2-1 2006-2-1

请各位帮助。
...全文
238 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sgucxc0 2006-12-28
  • 打赏
  • 举报
回复
select A.ListName,min(case when B.TypeId=1 then [date] end) 填写日期,
min(case when B.TypeId=2 then [date] end) 审核日期,
min(case when B.TypeId=3 then [date] end) 审批日期
from A inner join B on A.ListId=B.PK_ListId group by A.ListName,A.ListID order by A.ListID
/*
ListName 填写日期 审核日期 审批日期
-------- ----------------------- ------------------------ -----------------------
方案1 2006-01-01 00:00:00.000 2006-01-02 00:00:00.000 2006-01-03 00:00:00.000
报告 2006-02-01 00:00:00.000 2006-02-02 00:00:00.000 NULL

(所影响的行数为 2 行)
*/
proglovercn 2006-12-28
  • 打赏
  • 举报
回复
declare @t1 table(ID int,ListID char(3),ListName nvarchar(5))
insert into @t1
select 1,'TL1',N'方案1'
union all
select 2,'TL2',N'报告 '
select * from @t1

declare @t2 table(ID int,PK_ListID char(3),TypeID int,Date datetime)
insert into @t2
select 1,'TL1',1,'2006-1-1'
union all
select 2,'TL1',2,'2006-1-2'
union all
select 3,'TL1',3,'2006-1-3'
union all
select 4,'TL2',1,'2006-2-1'
union all
select 5,'TL2',2,'2006-2-2'
select * from @t2

select
T1.ListName As 'ListName'
,(Select Date From @T2 Where PK_listID=T1.ListID And TypeId=1) As N'填写日期'
,(Select Date From @T2 Where PK_listID=T1.ListID And TypeId=2) As N'审核日期'
,(Select Date From @T2 Where PK_listID=T1.ListID And TypeId=3) As N'审批日期'
from
@t1 T1
--原始数据:
表1
ID ListID ListName
-------------------------------
1 TL1 方案1
2 TL2 报告

表2
ID PK_ListID TypeID Date
-----------------------------------------------
1 TL1 1 2006-01-01 00:00:00.000
2 TL1 2 2006-01-02 00:00:00.000
3 TL1 3 2006-01-03 00:00:00.000
4 TL2 1 2006-02-01 00:00:00.000
5 TL2 2 2006-02-02 00:00:00.000
--运行结果:
ListName 填写日期 审核日期 审批日期
---------------------------------------------------
方案1 2006-01-01 00:00:00.000 2006-01-02 00:00:00.000 2006-01-03 00:00:00.000
报告 2006-02-01 00:00:00.000 2006-02-02 00:00:00.000 NULL

marco08 2006-12-28
  • 打赏
  • 举报
回复
create table A(ID int, ListID nvarchar(10), ListName nvarchar(10))
insert A select 1, 'TL1', '方案1'
union all select 2, 'TL2', '报告'

create table B(ID int, PK_ListID nvarchar(10), TypeID int, [Date] datetime)
insert B select 1, 'TL1', 1, '2006-1-1'
union all select 2, 'TL1', 2, '2006-1-2'
union all select 3, 'TL1', 3, '2006-1-3'
union all select 4, 'TL2', 1, '2006-2-1'
union all select 5, 'TL2', 2, '2006-2-2'

select A.ListID, A.ListName,
填写日期=max(case when TypeID=1 then [Date] end),
审核日期=max(case when TypeID=2 then [Date] end),
审批日期=max(case when TypeID=3 then [Date] end)
from B
right join A on A.ListID=B.PK_ListID
group by A.ListID, A.ListName
order by A.ListID

--result
ListID ListName 填写日期 审核日期 审批日期
---------- ---------- ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------
TL1 方案1 2006-01-01 00:00:00.000 2006-01-02 00:00:00.000 2006-01-03 00:00:00.000
TL2 报告 2006-02-01 00:00:00.000 2006-02-02 00:00:00.000 NULL

(2 row(s) affected)
jacobsan 2006-12-28
  • 打赏
  • 举报
回复
select min(ListName), min(case b.TypeID when 1 then b.Date end) as 填写日期,min(case b.TypeID when 2 then b.Date end) as 审核日期,min(case b.TypeID when 3 then b.Date end) as 审批日期 from talbe1 a,table2 b where a.ListID = b.PK_ListID group by a.ListID
roundman 2006-12-28
  • 打赏
  • 举报
回复
select T01.ListName,
T02.date as 填写日期,
T03.date as 审核日期,
T04.date as 审批日期
from table1 T01
left join table2 T02
on T01.ListID = T02.PK_ListID
and T02.TypeID = 1
left join table2 T03
on T01.ListID = T03.PK_ListID
and T03.TypeID = 2
left join T04
on T01.ListID = T04.PK_ListID
and T04.TypeID = 3
dulei115 2006-12-28
  • 打赏
  • 举报
回复
select a.ListID, min(case b.TypeID when 1 then b.Date end) as 填写日期,
min(case b.TypeID when 2 then b.Date end) as 审核日期,
min(case b.TypeID when 3 then b.Date end) as 审批日期
from talbe1 a join table2 b ona a.ListID = b.PK_ListID
group by a.ListID
pingo888 2006-12-28
  • 打赏
  • 举报
回复
结果错了,对不起,应该是
想得到结果:
ListName 填写日期 审核日期 审批日期
方案1 2006-1-1 2006-1-2 2006-1-3
报告 2006-2-1 2006-2-2
源码链接: https://pan.quark.cn/s/a4b39357ea24 微信小程序是由腾讯公司设计的一种轻量级应用开发平台,主要面向移动设备,旨在为用户带来无需下载安装即可直接使用的应用服务体验。在微信小程序的开发实践中,"模仿美团菜单 swiper分类菜单"是一项常见的技术应用,其目的是达成与美团外卖应用相似的交互模式,使用户能够轻松地浏览和挑选各种商品或服务。 在微信小程序的技术体系中,`swiper`组件属于轮播图功能模块,通常用于呈现多张图片或卡片式的切换界面,能够达成动态滑动展示不同分类菜单的功能。在模拟美团菜单的应用情境下,`swiper`组件一般与`swiper-item`组件协同工作,每一个`swiper-item`对应一个分类,用户可通过左右滑动来切换不同的分类菜单。 为了达成这样的功能,首先需要在微信小程序的`json`配置文档中引入`swiper`组件,并在`wxml`结构文档中构建相应的布局代码,将每个分类以`swiper-item`的形式进行组织。同时,需要在`wxss`样式文档中定义恰当的样式,保证分类菜单的视觉呈现符合设计规范。 接下来,我们将在`js`逻辑文档中处理`swiper`的切换逻辑,通过监听`bindchange`事件来识别当前选中的分类,并根据这一信息动态获取对应的子菜单信息。为了达成类似美团的层级菜单功能,可能还需要借助`picker`或`navigator`组件来展示二级分类或商品详情。 在开发阶段,需要关注以下关键点: 1. 数据绑定:保证数据与界面之间的双向链接准确无误,以便在选择分类时即时更新显示内容。 2. 动态加载:针对大量数据,可能需要采取异步加载机制,防止一次性加载过多内容引发性能瓶颈...
代码下载地址: https://pan.quark.cn/s/72bd50ecb2fb 《微信飞机大战素材详解》 微信飞机大战作为一款广受欢迎的休闲游戏,凭借其便捷的操作方式和紧张刺激的游戏过程,赢得了众多用户的青睐。本文将系统性地剖析这款游戏的关键素材,旨在帮助开发者全面掌握游戏的设计理念与实现方法。 我们聚焦于游戏的核心构成——"AirplaneResource"。此名称一般指向游戏资源库,其中收纳了游戏中所有的视觉素材、音频资料以及动画元素。在微信飞机大战的语境下,这些资源构成了游戏画面呈现、音效播放和动态效果的基础。 1. **图像素材**:游戏中的飞机造型、敌方单位、弹药以及爆炸效果等视觉元素,均以图像素材的形式进行展示。图像素材通常涵盖PNG或JPG格式的静态图片,也包括GIF或APNG格式的动态图片。开发者需要细致地设计并优化这些图像,确保在各种设备上都能实现流畅的渲染,同时维持视觉表现力。 2. **声音素材**:游戏的背景音乐、射击音效、爆炸声等音频片段,对于构建游戏氛围具有决定性作用。这些音频文件可能以MP3、WAV或OGG格式进行存储,开发者需要权衡音频的压缩程度与音质,以确保在不牺牲游戏体验的前提下,有效控制文件体积。 3. **动画序列**:飞机的飞行轨迹、攻击动作、爆炸过程等动态表现,通常借助序列帧动画技术实现。这些序列帧图片组合而成的动画,通过编程控制播放速率和顺序,为游戏增添生动的动态效果。 4. **物理接触判定**:游戏中飞机与弹药之间的接触判定,是通过算法完成的。开发者可能会采用基础的矩形接触判定或更精密的像素级接触判定,以保证游戏的公平性和挑战性。 5. **游戏规则**:微信飞机大战的得分机制、生命值系统、敌机生成逻辑等...

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧