请问这样的表如何处理...mysql

lovesnow1314 2009-06-14 02:25:57
+-----+------------------+--------------+-------------+-----------+-----------+---------+--------+------------+-------------+-----------
| id | filename | ChemistryKit | BinSetName | PanelName | MakerName | BinName | Size | LeftOffset | RightOffSet | Other
+-----+------------------+--------------+-------------+-----------+-----------+---------+--------+------------+-------------+-----------
| 287 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 100 | 99.95 | 0.50 | 0.50 | dark gray
|
| 53 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 100 | 99.96 | 0.50 | 0.29 | dark gray
|
| 288 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 101 | 100.97 | 0.50 | 0.50 | dark gray
|
| 54 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 101 | 100.93 | 0.33 | 0.50 | dark gray
|
| 289 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 102 | 102.11 | 0.50 | 0.50 | dark gray
|
| 55 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 103 | 103.25 | 0.50 | 0.50 | dark gray
|
| 290 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 103 | 103.30 | 0.50 | 0.50 | dark gray
|
| 56 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 104 | 104.34 | 0.50 | 0.50 | dark gray
|
| 291 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 105 | 104.54 | 0.50 | 0.50 | dark gray
|
| 57 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 106 | 105.67 | 0.50 | 0.33 | dark gray
|
| 292 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 106 | 105.68 | 0.50 | 0.26 | dark gray
|
| 293 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 107 | 106.59 | 0.39 | 0.35 | dark gray
|
| 58 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 107(1) | 106.60 | 0.31 | 0.32 | dark gray
|
| 59 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 107(2) | 107.47 | 0.25 | 0.50 | dark gray
|
| 294 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 108 | 107.51 | 0.20 | 0.50 | dark gray
|
| 295 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 109 | 108.68 | 0.50 | 0.32 | dark gray
|
| 60 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 109 | 108.86 | 0.50 | 0.15 | dark gray
|
| 61 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 110(1) | 109.65 | 0.34 | 0.30 | dark gray
|
| 296 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 110(1) | 109.64 | 0.29 | 0.25 | dark gray
|
| 297 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 110(2) | 110.38 | 0.30 | 0.40 | dark gray
|
| 62 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 110(2) | 110.34 | 0.21 | 0.30 | dark gray
|
| 63 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 111 | 111.28 | 0.35 | 0.50 | dark gray
|
| 298 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 111 | 111.31 | 0.26 | 0.50 | dark gray
|
| 299 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 113 | 112.73 | 0.50 | 0.50 | dark gray
|
| 64 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 113 | 112.75 | 0.50 | 0.50 | dark gray
|
| 65 | D:Bin1_1_Bin.txt | 1_1 | 1_1_Bin_Set | 1_1 | Blue | 115 | 115.32 | 0.50 | 0.32 | dark gray
|
| 300 | D:Bin2-1_Bin.txt | 2-1 | 2-1_Bin_Set | 2-1 | Blue | 115 | 115.28 | 0.50 | 0.45 | dark gray
| |



最终得到的形式是

---------------------------------------------------------------------------------------------------------
BinSetName | BinName(51) | BinName(52) | ...................
---------------------------------------------------------------------------------------------------------
1_1_Bin_Set | 0 | 1 | 0 | 1 |0 | 0 | 1
---------------------------------------------------------------------------------------------------------
2_1_Bin_Set | 1 | 1



0 和 1 表示在区间内是否存在值.
...全文
41 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovesnow1314 2009-06-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ACMAIN_CHM 的回复:]
SQL codeSET @EE='';
SELECT @EE:=CONCAT(@EE,'SUM(IF(BinName=\'',BinName,'\'',',1,0)) AS `',BinName,'`,') FROM (SELECT DISTINCT BinName FROM TX) A;

SET @QQ=CONCAT('SELECT BinSetName,',LEFT(@EE,LENGTH(@EE)-1),' FROM TX GROUP BY BinSetName ');
PREPARE stmt2 FROM @QQ;
EXECUTE stmt2;





BatchFile codemysql> EXECUTE stmt2;
+-------------+------+------+------+------+------+--------+--…
[/Quote]


谢谢,我试验一下!!
ACMAIN_CHM 2009-06-14
  • 打赏
  • 举报
回复

SET @EE=''; 
SELECT @EE:=CONCAT(@EE,'SUM(IF(BinName=\'',BinName,'\'',',1,0)) AS `',BinName,'`,') FROM (SELECT DISTINCT BinName FROM TX) A;

SET @QQ=CONCAT('SELECT BinSetName,',LEFT(@EE,LENGTH(@EE)-1),' FROM TX GROUP BY BinSetName ');
PREPARE stmt2 FROM @QQ;
EXECUTE stmt2;



[code=BatchFile]mysql> EXECUTE stmt2;
+-------------+------+------+------+------+------+--------+--------+------+--------+--------+------+------+------+------+------+------+------+
| BinSetName | 100 | 101 | 103 | 104 | 106 | 107(1) | 107(2) | 109 | 110(1) | 110(2) | 111 | 113 | 115 | 102 | 105 | 107 | 108 |
+-------------+------+------+------+------+------+--------+--------+------+--------+--------+------+------+------+------+------+------+------+
| 1_1_Bin_Set | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 2-1_Bin_Set | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
+-------------+------+------+------+------+------+--------+--------+------+--------+--------+------+------+------+------+------+------+------+
2 rows in set (0.06 sec)

mysql>[/code]


如果你在C中,那更简单了,直接用mysql_real_query() 得到查询 "SELECT DISTINCT BinName FROM TX"的结果,生成这么一个SQL语句的字符串即可

SELECT BinSetName,
SUM(IF(BinName='100',1,0)) AS `100`,
SUM(IF(BinName='101',1,0)) AS `101`,
SUM(IF(BinName='103',1,0)) AS `103`,
SUM(IF(BinName='104',1,0)) AS `104`,
SUM(IF(BinName='106',1,0)) AS `106`,
SUM(IF(BinName='107(1)',1,0)) AS `107(1)`,
SUM(IF(BinName='107(2)',1,0)) AS `107(2)`,
SUM(IF(BinName='109',1,0)) AS `109`,
SUM(IF(BinName='110(1)',1,0)) AS `110(1)`,
SUM(IF(BinName='110(2)',1,0)) AS `110(2)`,
SUM(IF(BinName='111',1,0)) AS `111`,
SUM(IF(BinName='113',1,0)) AS `113`,
SUM(IF(BinName='115',1,0)) AS `115`,
SUM(IF(BinName='102',1,0)) AS `102`,
SUM(IF(BinName='105',1,0)) AS `105`,
SUM(IF(BinName='107',1,0)) AS `107`,
SUM(IF(BinName='108',1,0)) AS `108`
FROM TX GROUP BY BinSetName


然后再执行这个SQL语句得到结果。
lovesnow1314 2009-06-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ACMAIN_CHM 的回复:]

我的问题是: 是否算是 110 ? 即 110(2) 是否视同 110 来处理?如果说1_1_Bin_Set有110(2) 是否算 110 上为 1, 还是 110(2),110(1) 要另外单列?!
BinName(110) | BinName(110(1)) | BinName(110(2))

建议准确描述你的需求,没必要把时间都浪费在这种反复的确认上。

当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
[/Quote]

不好意思,我问题描述的的确不清晰,可能发贴的时候没想到有人会给我认真的解答.
感谢你的耐心,结贴肯定的,放心.

如果100被分为100(1),100(2),则同时列出.

--------------------------------------------------
110(1) 110(2)
--------------------------------------------------
1 1
--------------------------------------------------
1 1
--------------------------------------------------

如果还存在110,则3个同时列出
--------------------------------------------------
110 110(1) 110(2)
--------------------------------------------------
1 1 1
--------------------------------------------------
1 1 1
--------------------------------------------------

只要BinName的名字不同,就是一个单独的列.

如果size同时在3个区间内,则可以都为1
ACMAIN_CHM 2009-06-14
  • 打赏
  • 举报
回复

请按照下面的数据,给出你的正确答案。

[code=BatchFile]mysql> select * from tx;
+-----+-------------+---------+
| id | BinSetName | BinName |
+-----+-------------+---------+
| 53 | 1_1_Bin_Set | 100 |
| 54 | 1_1_Bin_Set | 101 |
| 55 | 1_1_Bin_Set | 103 |
| 56 | 1_1_Bin_Set | 104 |
| 57 | 1_1_Bin_Set | 106 |
| 58 | 1_1_Bin_Set | 107(1) |
| 59 | 1_1_Bin_Set | 107(2) |
| 60 | 1_1_Bin_Set | 109 |
| 61 | 1_1_Bin_Set | 110(1) |
| 62 | 1_1_Bin_Set | 110(2) |
| 63 | 1_1_Bin_Set | 111 |
| 64 | 1_1_Bin_Set | 113 |
| 65 | 1_1_Bin_Set | 115 |
| 287 | 2-1_Bin_Set | 100 |
| 288 | 2-1_Bin_Set | 101 |
| 289 | 2-1_Bin_Set | 102 |
| 290 | 2-1_Bin_Set | 103 |
| 291 | 2-1_Bin_Set | 105 |
| 292 | 2-1_Bin_Set | 106 |
| 293 | 2-1_Bin_Set | 107 |
| 294 | 2-1_Bin_Set | 108 |
| 295 | 2-1_Bin_Set | 109 |
| 296 | 2-1_Bin_Set | 110(1) |
| 297 | 2-1_Bin_Set | 110(2) |
| 298 | 2-1_Bin_Set | 111 |
| 299 | 2-1_Bin_Set | 113 |
| 300 | 2-1_Bin_Set | 115 |
+-----+-------------+---------+
27 rows in set (0.00 sec)[/code]
ACMAIN_CHM 2009-06-14
  • 打赏
  • 举报
回复


我的问题是: 是否算是 110 ? 即 110(2) 是否视同 110 来处理?如果说1_1_Bin_Set有110(2) 是否算 110 上为 1, 还是 110(2),110(1) 要另外单列?!
BinName(110) | BinName(110(1)) | BinName(110(2))

建议准确描述你的需求,没必要把时间都浪费在这种反复的确认上。

当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
lovesnow1314 2009-06-14
  • 打赏
  • 举报
回复
感谢ACMAIN_CHM的回复~
lovesnow1314 2009-06-14
  • 打赏
  • 举报
回复
因为size是存在区间的,leftoffset,rightoffset界定了区间,所以可能一个单位内存在2个值,用(1)(2)区分.
ACMAIN_CHM 2009-06-14
  • 打赏
  • 举报
回复

110(1)
110(1)
110(2)
110(2)

这些带 (1), (2) 算什么呢?是否算是 110 ?
lovesnow1314 2009-06-14
  • 打赏
  • 举报
回复
这个看过了,不太明白,mysql新学不久,这个工作比较着急,能不能帮我写下方案,以后再仔细研究.

另外问下,动态sql语句的能否在 C mysql API中用mysql_query()这个函数调用?
lovesnow1314 2009-06-14
  • 打赏
  • 举报
回复
不好意思,这里的BinName没有51这个值,BinName(100)吧,这个是 BinName的一个值 100, 下一列是 BinName的第二个值101, 然后 102 103 ...

0 , 1 是看BinName= 101 的时候 Size 的值,比如2-1_Bin_Set在102没有值则为0.

谢谢..

--------------------------------------------------------
BinSetName | BinName(100) | BinName(101) | BinName(102)
---------------------------------------------------------
1_1_Bin_Set | 1 | 1 | 0
---------------------------------------------------------
2_1_Bin_Set | 1 | 1 | 1
ACMAIN_CHM 2009-06-14
  • 打赏
  • 举报
回复
ACMAIN_CHM 2009-06-14
  • 打赏
  • 举报
回复

[code=BatchFile]------------------------------------------
BinSetName | BinName(51) | BinName(52) |
------------------------------------------
1_1_Bin_Set | 0 | 1 |
------------------------------------------
2_1_Bin_Set | 1 | 1

[/code]

这两行是怎么来的?

BinName(51), BinName(52) 是什么意思?下面的 0, 1 是如果从上表来的?


56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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