主表:CREATE TABLE IF NOT EXISTS `a` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nid` int(10) NOT NULL,
  `vcname` varchar(10) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=gb2312 AUTO_INCREMENT=8 ;--
-- 转存表中的数据 `a`
--INSERT INTO `a` (`id`, `nid`, `vcname`) VALUES
(6, 10001, '张三'),
(7, 10002, '李四');
子表:CREATE TABLE IF NOT EXISTS `b` (
  `nid` int(10) NOT NULL,
  `kemu` varchar(10) NOT NULL DEFAULT '',
  `fenshu` int(10) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;--
-- 转存表中的数据 `b`
--INSERT INTO `b` (`nid`, `kemu`, `fenshu`) VALUES
(10001, '语文', 98),
(10001, '数学', 100),
(10002, '语文', 80),
(10002, '数学', 90);
我想显示的结果为:nid    name     语文    数学10001  张三     98      100
10002  李四     80       90
请问这个SQL怎么写?在线等。谢谢大家

解决方案 »

  1.   

    SELECT a1.`nid`, a1.`vcname` ,SUM(IF(`kemu`='语文',`fenshu`,0)),
    SUM(IF(`kemu`='数学',`fenshu`,0))FROM a a1 LEFT JOIN b
    ON a1.`nid`=b.`nid`
    GROUP BY  a1.`nid`, a1.`vcname`
      

  2.   


    请教老大,我如果想列这样的怎么弄?nid   name  科目  分数  科目  分数10001 张三   语文   98   数学  100
    10002 李四   语文   80   数学   90
      

  3.   

    SELECT a1.`nid`, a1.`vcname` ,MAX(IF(`kemu`='语文','语文','')) AS 科目1,SUM(IF(`kemu`='语文',`fenshu`,0)) AS 分数1,
    MAX(IF(`kemu`='数学','数学','')) AS 科目2,
    SUM(IF(`kemu`='数学',`fenshu`,0)) AS 分数2FROM a a1 LEFT JOIN b
    ON a1.`nid`=b.`nid`
    GROUP BY a1.`nid`, a1.`vcname`
      

  4.   

    参考下贴中多种方法。http://blog.csdn.net/acmain_chm/article/details/4283943
    MySQL交叉表
    在某些数据库中有交叉表,但在MySQL中却没有这个功能,但网上看到有不少朋友想找出一个解决方法,特发贴集思广义。http://topic.csdn.net/u/20090530/23/0b782674-4b0b-4cf5-bc1a-e8914aaee5ab.html?96198现整理解法如下:数据样本: create table tx(  id int primary key,  c1 c...
      

  5.   

    select *
    from a ,b b1, b b2
    where a.nid=b1.nid and a.nid=b2.nid
    and b1.kemu='语文'
    and b2.kemu='数学'