2011-06-01 127 views
0

可能不是最具描述性的标题,但有时候很难将愚蠢的SQL问题(那种让您想把咖啡中的酒精化为一天)变成英文的问题。我主要有以下两个表:如何在SQL中添加虚拟值

TABLE1

studentid firstname lastname counter cmid score lessond 
328000   Jacob   GG    5 189 90 103950 
328111   Jacob   GG   6 189 80 103951 
3283333   Tyler   GR   5 189 70 103950 
3244444   William FL    5 189 70 103950 
3280000   Sean   DA   5 189 80 103950 
3283333   Sean   DA    6 189 90 103951 

表2

Lesson2ClassroomAssignmentId Counter 
103956      1 
103947       2 
103948       3 
103949       4 
103950       5 
103951       6 

第一张表基本上是学生名单和编号的某些教训分数( 1-6并用计数器表示)。第二张表是所有可能课程的列表(编号为1-6,由计数器表示)。

我需要做的是为每个学生和每个课程获取一张表格,无论该学生是否在表格1中为该课程设置了一行。

我试着做一些事情,如从表1中选择*并将第二张表的结果UNIONING与第一张表的结果联系起来,其中计数器<>计数器但未能得到我想要的结果。

如果有人有任何建议(不需要完整的答案,只需指出正确的方向)我欠你一个!另外,随意取笑我,如果这个职位是unintelligable因为它几乎对我来说很有意义,我谁也它一直盯着过去6小时一个;)

的Ciao Ciao的,

期望的输出:

所需的输出将是:

表FINAL

studentid  firstname lastname counter cmid score lessond 
    3280000   Jacob  GG  1 NULL, NULL, NULL 
    3280000   Jacob  GG 2 NULL, NULL, NULL 
    3280000   Jacob  GG 3 NULL, NULL, NULL 
    3280000   Jacob  GG 4 NULL, NULL, NULL 
    3280000   Jacob  GG 5 189, 90, 103950 
    3280000   Jacob  GG 6 189, 80, 103951 
    3283333   Tyler  GR 1, NULL, NULL, NULL 
    3283333   Tyler  GR 2, NULL, NULL, NULL 
    3283333   Tyler  GR 3, NULL, NULL, NULL 
    3283333   Tyler  GR 4, NULL, NULL, NULL 
    3283333   Tyler  GR 5, 189, 70, 103950 
    3283333   Tyler  GR 6, NULL, NULL, NULL 

因此,基本上从表一中抽取任何一行学生的实际课文数据,并为每个课程(表2)中没有得分数据的虚拟行补充该学生没有得分。

+0

能你向我们展示所需的输出? – 2011-06-01 20:59:10

回答

0

看起来你会受益于学生表和课表。 然后你可以做一个未加入的选择从他们都获得所有行的交叉产品。

-1

如果您发现自己的时间很有价值,只需购买旨在提供此类功能的商业产品之一即可。

我很高兴与EMS Data Generator for SQL Server这是不到$ 100的价格...

EMS数据发生器,用于SQL Server是 与可能性生成测试 数据到SQL Server数据库表 一个令人印象深刻的工具保存并编辑 脚本。该实用程序可以帮助您 模拟数据库生产 环境,并允许您填充 几个SQL Server数据库表 同时与试验数据,定义 表和字段生成数据, 设定值范围内,生成的SQL Server 焦炭领域通过掩码,手动定义 值列表或从 SQL查询中选择它们,为每个字段类型设置生成参数 并具有许多其他 功能以简单直接的方式生成SQL Server测试 数据。数据 发生器SQL Server还提供 一个控制台应用程序,它允许您 通过使用代 模板生成一触式 SQL Server测试数据。

+1

-1,不要被标题所迷惑。如果你阅读这个问题,你会发现他在问如何选择数据。 – 2011-06-01 21:03:35

+0

如果对他来说“毫无意义”,你怎么能确定他到底想要完成什么? – 2011-06-01 21:06:31

+0

您是否诚实地阅读了这个问题,并得到了他想要将测试数据插入到数据库中的印象.... – 2011-06-01 21:22:23

2

尝试使用交叉联接

如: 我添加了一个伪列IsMatch以确定如果当前行是匹配的行与否,以防万一....

SELECT a.*, 
     b.*, 
     a.counter-b.counter AS IsMatch 
    FROM TABLE1 a CROSS JOIN TABLE2 b 
ORDER BY studentid