佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1334|回复: 7

将几个Table合起来

[复制链接]
发表于 15-9-2006 12:16 PM | 显示全部楼层 |阅读模式
我有两个Table


  1. Person
  2. -ID
  3. -Name


  4. Detail
  5. -ID (person ID)
  6. -Field
  7. -Value
复制代码



例子

  1. Person (1, Sirius)
  2. Person (2, 网管)

  3. Detail (1, Address, 'My house')
  4. Detail (1, Tel, '994')
  5. Detail (1, Email, 'xxx@xxx.com')
  6. Detail (2, Address, 'His house')
  7. Detail (2, Tel, '100')
复制代码



请问有没有办法用SQL 将他们合起来,生成一个临时的Table,比如:


  1. New_Table
  2. -ID      : 1
  3. -Name    : Sirius
  4. -Address : My House
  5. -Tel     : 994
  6. -Email   : xxx@xxx.com
复制代码
回复

使用道具 举报


ADVERTISEMENT

发表于 15-9-2006 02:01 PM | 显示全部楼层
请问DETAIL里的FIELD VALUE是FIX的吗?如ADDRESS,TEL,NAME?
如果是FIX的,那可以用CASE或UNION来做,但SQLSTATEMENT比较长

或者用以下的sub query也可以
SELECT A.ID,A.Address,B.Name FROM
(SELECT D.ID,D.Field as Address FROM Person P,Detail D WHERE P.ID=D.ID AND D.Field='Address') A,
(SELECT D.ID,D.Field as Name FROM Person P,Detail D WHERE P.ID=D.ID AND D.Field='Name') B
WHERE A.ID=B.ID

不知道我有没有误会你的问题^^

[ 本帖最后由 max5007 于 15-9-2006 02:36 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 15-9-2006 02:54 PM | 显示全部楼层
原帖由 max5007 于 15-9-2006 02:01 PM 发表
请问DETAIL里的FIELD VALUE是FIX的吗?如ADDRESS,TEL,NAME?
如果是FIX的,那可以用CASE或UNION来做,但SQLSTATEMENT比较长

或者用以下的sub query也可以
SELECT A.ID,A.Address,B.Name FROM
(SELECT D. ...


不是Fixed的,但是每间公司一套,基本上可以当作Fixed的来看。

先谢谢了,我还在消化你的SQL statement。
回复

使用道具 举报

发表于 15-9-2006 03:34 PM | 显示全部楼层
原帖由 max5007 于 15-9-2006 02:01 PM 发表
请问DETAIL里的FIELD VALUE是FIX的吗?如ADDRESS,TEL,NAME?
如果是FIX的,那可以用CASE或UNION来做,但SQLSTATEMENT比较长

或者用以下的sub query也可以
SELECT A.ID,A.Address,B.Name FROM
(SELECT D.ID,D.Field as Address FROM Person P,Detail D WHERE P.ID=D.ID AND D.Field='Address') A,
(SELECT D.ID,D.Field as Name FROM Person P,Detail D WHERE P.ID=D.ID AND D.Field='Name') B
WHERE A.ID=B.ID

.


有点问题。。不是d.value 咩?。。
回复

使用道具 举报

发表于 15-9-2006 03:48 PM | 显示全部楼层
原帖由 tensaix2j 于 15-9-2006 03:34 PM 发表
有点问题。。不是d.value 咩?。。



o对。。是D.Value哈哈。。写错了。谢谢。。
回复

使用道具 举报

 楼主| 发表于 15-9-2006 04:57 PM | 显示全部楼层
tensaix2j真细心,我都没有发现。

放心,小弟抄功课是很专心的。我消化了max5007的SQL 后再来写的。
回复

使用道具 举报

Follow Us
发表于 15-9-2006 05:04 PM | 显示全部楼层
原帖由 Sirius 于 15-9-2006 04:57 PM 发表
tensaix2j真细心,我都没有发现。

放心,小弟抄功课是很专心的。我消化了max5007的SQL 后再来写的。


我这里没有table给我测试。。所以不小心哈哈。

如果你的field是不固定的。。那可以先用loop,然后再generate那SQL STATEMENT^^
回复

使用道具 举报

发表于 20-9-2006 03:32 PM | 显示全部楼层
VFP 的 Query 自动生成的 SQL 是

SELECT Detail.ID, Person.Name, Detail.Field, SUM(Detail.Value);
FROM Detail, Person;
WHERE  Detail.ID=Person.ID;
GROUP BY Detail.ID, Person.Name, Detail.Field;
ORDER BY Detail.ID, Person.Name, Detail.Field;
INTO CURSOR TempCursor  
DO (_GENXTAB) WITH 'Query',.t.,.t.,.t.,,,,.t.,0,.t.

_GENXTAB 是 VFP 内制的功能 Function/Procedure 用于 Cross-Tab 型 SQL
回复

使用道具 举报


ADVERTISEMENT

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 23-9-2024 09:28 PM , Processed in 0.137497 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表