注册 登录
编程论坛 SQL Server论坛

急!这个表如何创建?

球球 发布于 2007-11-12 19:13, 1442 次点击
只有本站会员才能查看附件,请 登录

这个表如何创建?现在有一张客户表和一张产品表.
这是一个客户历来的购物情况,标出来的是已经购买的商品,按季度来分的,购物车中有未购买的商品。
请大家帮帮小弟,谢谢!

[此贴子已经被作者于2007-11-12 19:14:51编辑过]

16 回复
#2
purana2007-11-12 19:18

你已经有一个客户表,一个产品表了..
你再建一个订单表..就ok了..记录客户id.产品id,购买日期.和你想保存的其它信息..
不一定说要建你这个图的..
到时查询出来..做一个动态的分组统计就行了.

#3
tml3272007-11-12 19:19
用Microsoft Excel编辑 就可以呀!

#4
球球2007-11-12 19:22
好的,我试试,谢谢2位.
#5
tml3272007-11-12 19:22
先做 呀!

#6
球球2007-11-12 19:34
请问下,purana斑竹,如何来动态分组?
#7
tml3272007-11-12 19:54
是这个吗?https://bbs.bc-cn.net/viewthread.php?tid=185319&star=at#
按列分组

<colgroup align=#> #=left, right, center

<col span=#> #=从左边数起,具有指定属性的列的列数

<col align=#> #=left, right, center

#8
purana2007-11-12 20:01

create table 客户表(
客户ID int,
客户姓名 varchar(50)
)

insert into 客户表 values(1,'张三')
insert into 客户表 values(2,'李明')
insert into 客户表 values(3,'小强')
insert into 客户表 values(4,'小花')
insert into 客户表 values(5,'小明')
insert into 客户表 values(6,'小李')

create table 产品表(
产品ID int,
产品名 varchar(50),
厂商 varchar(128)
)

insert into 产品表 values (1,'CPU','bc-cn')
insert into 产品表 values(2,'显卡','bc-cn')
insert into 产品表 values(3,'内存','bc-cn')
insert into 产品表 values(4,'硬盘','bc-cn')
insert into 产品表 values(5,'主板','bc-cn')
insert into 产品表 values(6,'光驱','bc-cn')

create table 订单表(
客户ID int,
产品ID int,
购买日期 datetime
)

insert into 订单表 values(1,2,'2007-2-20')
insert into 订单表 values(1,5,'2007-3-20')
insert into 订单表 values(4,1,'2007-4-20')
insert into 订单表 values(4,3,'2007-6-20')
insert into 订单表 values(4,4,'2007-7-20')

--假设你现在有这些表.数据..
--现在查询统计.


declare @sql varchar(8000),@head varchar(4000)
set @sql='select 购买日期=convert(char(10),购买日期,120)'
select @sql=@sql+',sum(case when 产品名='+quotename(产品名,'''')+' then 1 else 0 end)'+quotename(产品名)
from 产品表 group by 产品名
set @sql=@sql+' from 订单表,产品表 where 订单表.产品ID=产品表.产品ID group by 购买日期'

exec (@sql)

drop table 客户表,产品表,订单表

--查询结果..

/*

购买日期 CPU 光驱 内存 显卡 硬盘 主板
---------- ----------- ----------- ----------- ----------- ----------- -----------
2007-02-20 0 0 0 1 0 0
2007-03-20 0 0 0 0 0 1
2007-04-20 1 0 0 0 0 0
2007-06-20 0 0 1 0 0 0
2007-07-20 0 0 0 0 1 0

*/

做了个简单示例.

#9
tml3272007-11-12 20:09
我要抢先试一下喽!
#10
球球2007-11-12 20:15
不愧为斑竹,收藏了.太谢谢了.爱死你了.
#11
purana2007-11-12 21:32

create table 客户表(
客户ID int,
客户姓名 varchar(50)
)

insert into 客户表 values(1,'张三')
insert into 客户表 values(2,'李明')
insert into 客户表 values(3,'小强')
insert into 客户表 values(4,'小花')
insert into 客户表 values(5,'小明')
insert into 客户表 values(6,'小李')

create table 产品表(
产品ID int,
产品名 varchar(50),
厂商 varchar(128)
)

insert into 产品表 values (1001,'CPU','bc-cn')
insert into 产品表 values(1002,'显卡','bc-cn')
insert into 产品表 values(1003,'内存','bc-cn')
insert into 产品表 values(1004,'硬盘','bc-cn')
insert into 产品表 values(1005,'主板','bc-cn')
insert into 产品表 values(1006,'光驱','bc-cn')

create table 订单表(
客户ID int,
产品ID int,
购买日期 datetime
)

insert into 订单表 values(1,1002,'2007-2-20')
insert into 订单表 values(1,1005,'2007-3-20')
insert into 订单表 values(4,1001,'2007-4-20')
insert into 订单表 values(4,1003,'2007-6-20')
insert into 订单表 values(4,1004,'2007-7-20')

--假设你现在有这些表.数据..
--现在查询统计.


declare @sql varchar(8000),@head varchar(4000)
set @sql='select 购买日期=convert(char(10),购买日期,120)'
select @sql=@sql+',max(case when 产品名='+quotename(产品名,'''')+' then 产品表.产品ID end)'+quotename(产品名)
from 产品表 group by 产品名
set @sql=@sql+' from 订单表,产品表 where 订单表.产品ID=产品表.产品ID group by 购买日期'

exec (@sql)

drop table 客户表,产品表,订单表

#12
缘吇弹2007-11-12 21:51
good job
#13
baijian7102007-11-13 07:55
这个订单表作的好,把两个表联系起来了。
#14
球球2007-11-14 11:32
产品表里有个产品的型号,字符串型,如何把产品型号查出来?
#15
purana2007-11-16 19:05

11楼不是改用了max函数了吗?.

create table 客户表(
客户ID int,
客户姓名 varchar(50)
)

insert into 客户表 values(1,'张三')
insert into 客户表 values(2,'李明')
insert into 客户表 values(3,'小强')
insert into 客户表 values(4,'小花')
insert into 客户表 values(5,'小明')
insert into 客户表 values(6,'小李')

create table 产品表(
产品ID int,
产品名 varchar(50),
产品型号 varchar(10),
厂商 varchar(128)
)

insert into 产品表 values (1001,'CPU','1141','bc-cn')
insert into 产品表 values(1002,'显卡','1adf','bc-cn')
insert into 产品表 values(1003,'内存','hgcv','bc-cn')
insert into 产品表 values(1004,'硬盘','1qer','bc-cn')
insert into 产品表 values(1005,'主板','1hh','bc-cn')
insert into 产品表 values(1006,'光驱','114f1','bc-cn')

create table 订单表(
客户ID int,
产品ID int,
购买日期 datetime
)

insert into 订单表 values(1,1002,'2007-2-20')
insert into 订单表 values(1,1005,'2007-3-20')
insert into 订单表 values(4,1001,'2007-4-20')
insert into 订单表 values(4,1003,'2007-6-20')
insert into 订单表 values(4,1004,'2007-7-20')

--假设你现在有这些表.数据..
--现在查询统计.


declare @sql varchar(8000),@head varchar(4000)
set @sql='select 购买日期=convert(char(10),购买日期,120)'
select @sql=@sql+',max(case when 产品名='+quotename(产品名,'''')+' then 产品表.产品型号 end)'+quotename(产品名)
from 产品表 group by 产品名
set @sql=@sql+' from 订单表,产品表 where 订单表.产品ID=产品表.产品ID group by 购买日期'

exec (@sql)

drop table 客户表,产品表,订单表

/*

购买日期 CPU 光驱 内存 显卡 硬盘 主板
---------- ---------- ---------- ---------- ---------- ---------- ----------
2007-02-20 NULL NULL NULL 1adf NULL NULL
2007-03-20 NULL NULL NULL NULL NULL 1hh
2007-04-20 1141 NULL NULL NULL NULL NULL
2007-06-20 NULL NULL hgcv NULL NULL NULL
2007-07-20 NULL NULL NULL NULL 1qer NULL

*/

#16
球球2007-11-17 13:44
太谢谢了.今天上午我也做出来了,不过不是通过数据库来做的.是用的循环对比替换.嗯,还是你的效率高些.
#17
球球2007-11-17 13:59
我是又查出产品表,然后通过循环对比替换:
foreach (DataRow dr2 in dt2.Rows)
{
for (int i = 1; i < dt.Columns.Count; i++)
{
foreach (DataRow dr in dt.Rows)
{
if (dr[i].ToString() == dr2["prodId"].ToString())
{
dr[i] = dr2["prodType"].ToString();
}
}
}
}
呵呵,想了一上午.不过还是采用你的方法直接查出来.谢谢!
1