100分急需解决一SQL使用问题!(100分)

  • 主题发起人 主题发起人 lls88
  • 开始时间 开始时间
L

lls88

Unregistered / Unconfirmed
GUEST, unregistred user!

有一表ABC的数据如下:

NAME SORTS COUNT
---------------------
AAA A 2
AAA B 4
CCC B 3
BBB A 2
AAA C 4

该如何使用SQL语句得出以下结果(SORTS内容不固定):

NAME A B C
-----------------
AAA 2 4 4
BBB 2
CCC 3
 
Select Name,Sorts,Sum(count)
from ABC
Group by Name,Sorts
order by Name
 
可以用Decision Cube中的控件。
 
with Query_Result do
begin
close;
sql.clear;
sql.add('select name');
with Query_Sorts do
begin
close;
sql.clear;
sql.add('select distinct sorts from "abc"');
open;
first;
while not eof do
begin
Query_Result.sql.add(',(select sum(count) from "abc" where sorts='''+fieldbyname('sorts').asstring+''') as '+fieldbyname('sorts').asstring);
next;
end;
close;
end;
sql.add(' from "abc" order by name');
prepare;
open;
end;
 
直接用SQL語句無法求出你所要的結果的形式( 無RDBMS的理論支持)
建議, 你先用kknight的方法, 可得出下列形式的結果:
NAME SORTS SUM_COUNT
AAA A 2
AAA B 4
...
再根据上述結果CREATE一個臨時表,字段列表串可用程式從上述結果集中獲得,然后把上述
結果集轉置到此臨時表中即可.當然, 你的SORTS值的個數不能大於你所用DBMS能支持的
最大FIELDS數
 
DJ 您好:
用您的方法得出的结果是:
NAME A B C
--------------------
AAA 4 7 4
BBB 4 7 4
CCC 4 7 4


 
kknight 您好:
由于我对Decision Cube中的控件不太熟悉。
可否具体讲解一下实作过程。
 
kknight 您好:
由于我对Decision Cube中的控件不太熟悉。
可否具体讲解一下实作过程。
 
Decision Cube
可以将数据库表分成多维
在form上放如下控件
DecisionCube,DecisionQuery,DecisionCube,DecisionGrid
写好属性(库名,SQL),建立好联系(如同Data access中的DBGrid
和Query)
左键双点DecisionQuery,好了,其他的靠你的触类旁通的经验了,不难。
 
kknight 的方法是错的。
DJ 的方法改一下是可行的,但是有一个致命缺点,如果数据量较大,时间会成平方增长,
这种办法我不是没有试过,有一次导致前一天晚上查询,第二天才能看结果。:-(
因为 DJ 的办法,实际上每一个数字都是一次 Select ,总共要执行 Rows * Cols 次的
Select 查询。
这个表结构的设计和查询结果的要求有点冲突,没有办法用 Query 一次得到,建议你用
kknight 的方法简单分组查询得到结果后,用 StringGrid 或其他控件手工填写结果吧。
From: BaKuBaKu
 
先做一個表Test,
字段名稱為 name,a,b,c
然後寫如下的語句.
DELETE FROM TEST
INSERT INTO TEST SELECT NAME,0,0 FROM ABC GROUP BY NAME
UPDATE TEST SET A=(SELECT SUM(iCOUNT) FROM ABC WHERE
ABC.NAME=TEST.NAME AND ABC.SORTS='A' ) ,
B=(SELECT SUM(iCOUNT) FROM ABC WHERE
ABC.NAME=TEST.NAME AND ABC.SORTS='B' ) ,
C=(SELECT SUM(iCOUNT) FROM ABC WHERE
ABC.NAME=TEST.NAME AND ABC.SORTS='C' )
注意,因為我是在sql server底下,count是關鍵字,所以將count改為icount
執行後,結果是在test中
 
多人接受答案了。
 
后退
顶部