如何效率的列出明细?

木头是猫 2009-03-16 11:49:06
==========================================================
表A (订单)
ID ORDER_ID ........
1 20090316
2 20090319
==========================================================
表B (订单里产品明细)
ID ORDER_ID PR_NUM PR_ID
1 20090316 20 13
2 20090319 10 12
3 20090316 5 110
==========================================================
表C (产品)
PR_ID PR_NAME
12 AAAAA
13 BBBBB
110 CCCCC
==========================================================

显示页面list.asp

单号 产品
20090316 AAAAA,CCCCC
20090319 BBBBB

==========================================================
能有用一条SQL语句就解决这个列表显示方式,又或者有什么比较效率的方法呢?
...全文
48 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdhdy 2009-03-16
  • 打赏
  • 举报
回复
--modify
CREATE FUNCTION dbo.f_str(@ORDER_ID varchar(20))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r = ''
SELECT @r = @r + ',' + PR_NAME FROM 表C WHERE PR_ID in (select PR_ID from 表B where ORDER_ID=@ORDER_ID)
RETURN STUFF(@r, 1, 1, '')
END
go
select ORDER_ID,dbo.f_str(dbo.f_str) from 表A
sdhdy 2009-03-16
  • 打赏
  • 举报
回复
CREATE FUNCTION dbo.f_str(@ORDER_ID varchar(20)) 
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r = ''
SELECT @r = @r + ',' + 产品 FROM 表C WHERE PR_ID in (select PR_ID from 表B where ORDER_ID=@ORDER_ID)
RETURN STUFF(@r, 1, 1, '')
END
go
select ORDER_ID,dbo.f_str(dbo.f_str) from 表A
htl258_Tony 2009-03-16
  • 打赏
  • 举报
回复
又要函数了.
htl258_Tony 2009-03-16
  • 打赏
  • 举报
回复
IF OBJECT_ID('A') IS NOT NULL DROP TABLE A
GO
create table A(ID int, ORDER_ID varchar(10))
insert A select 1, 20090316
insert A select 2, 20090319
GO
IF OBJECT_ID('B') IS NOT NULL DROP TABLE B
GO
create table B (ID int,ORDER_ID varchar(10), PR_NUM int, PR_ID int)
insert B select 1 , 20090316 , 20 , 13
insert B select 2 , 20090319 , 10 , 12
insert B select 3 , 20090316 , 5 , 110
GO
IF OBJECT_ID('C') IS NOT NULL DROP TABLE C
GO
create table C (PR_ID int,PR_NAME varchar(10))
insert C select 12 , 'AAAAA'
insert C select 13 , 'BBBBB'
insert C select 110, 'CCCCC'
GO
IF OBJECT_ID('f_str') IS NOT NULL DROP FUNCTION f_str
GO
CREATE FUNCTION dbo.f_str(@ORDER_ID varchar(20))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SELECT @r =ISNULL(@r + ',','') + PR_NAME FROM C JOIN B ON C.PR_ID=B.PR_ID WHERE B.ORDER_ID=@ORDER_ID
RETURN @r
END
GO

select ORDER_ID 单号,dbo.f_str(ORDER_ID) 产品 from A order by ORDER_ID

单号 产品
---------- -------------
20090316 BBBBB,CCCCC
20090319 AAAAA

(所影响的行数为 2 行)
楼主给的结果不对吧
超易办公用品管理软件是绿色软件,无插件,免安装,下载后解压即可使用!一、适用对象:超易办公用品管理软件适用各个公司行政部门用于管理办公用品,提升办公用品利用率,规范化管理有着非常好的作用,可以节省单位行政开支,提高行政管理效率,规范化员工行为。二、主要功能:超易办公用品管理软件根据各单位的办公用品的采购入库,领用流程而开发。主要以采购和领用为中心的场景管理模式,支持采购申请、收货、退货、付款业务处理,布局合理,操作人性化,向导化的操作模式,并且支持条码扫描枪录入,简单易用:采购管理:采购申请、采购报价、采购收货、采购退货、采购付款、现款采购;仓库管理:领料、退料、库存盘点、仓库调拨、借入、借出、借入还出、借出还入,库存汇总表、库存明细帐、库存报警、采购人员采购汇总表、明细表,供货方资料管理、供货方供货汇总、明细报表;现金银行:费用开支、其他收入、业务查找、银行存取款。经营分析:个人领用汇总表,个人领用明细表,部门领用汇总表,部门领用明细表。采购付款汇总、明细报表,供应商供货汇总、明细报表,客户付款汇总、明细报表,部门领用汇总、明细报表、仓库汇总、明细报表。使公司业务情况一目了然。超易办公用品管理软件是目前国内性价比最高的,最好的办公用品管理软件,相比同类型软件具有界面美观大方,功能强大而操作简单,自定义功能特别强大,是目前国内唯一一款提供超级强大自定义功能的办公用品管理软件,软件DIY就从你开始。三、部分特色功能:1、整个操作界面完全类似于 Office,支持不同界面之间的切换。2、超易软件所有的表格均可自定义设置列宽,列标题名称,某列是否显示。(吐血推荐)3、导入功能支持自定义选择列,在一个界面上就可以完成列的选择,功能强大但操作简单。4、支持导出的格式有 PDF,图片格式,网页格式(htm,html),Excel,CSV等格式。5、保留用户的常用操作习惯,例如窗体的界面位置等。好6、允许设立多个帐套管理。软件允许用户自定义小数点位数、允许用户自定义结帐日期。7、支持商品入库、出库、退库、调库、借出、归还、盘点等多项货物操作流程8、支持以仓库为中心的场景管理模式;9、支持入库、出库和调拨向导操作模式;10、支持生成每月的物品收发结存表,使企业界及时的了解当前库存情况;11、采购付款明细情况,及分析报表;12、支持生成每种物品的收发明细账;13、采购价格分析,采购年报表等多种报表,使公司业务情况一目了然;14、支持警戒库存量报警功能;15、

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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