如何在SQL中向表中添加虚拟值

时间:2011-06-01 20:52:37

标签: 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中选择*并使用第一个表LEFT OUTER JOINED与第一个表的结果进行联合,其中第一个表是<>反击,但没有能够得到我想要的结果。

如果有人有任何建议(不需要完整的答案,只是指向正确的方向)我应该欠你一个!或者,如果这篇文章不可理解,请随意取笑我,因为它对我来说几乎没有意义,我是那个在过去6个小时里一直盯着它的人;)

Ciao Ciao,

期望的输出:

所需的输出将是:

TABLE 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)没有得分数据,该学生没有得分。

3 个答案:

答案 0 :(得分:2)

尝试使用交叉连接

e.g: 我添加了一个伪列IsMatch来识别当前行是否是匹配的行,以防万一......

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

答案 1 :(得分:0)

看起来您可以从Student表和Lesson表中受益。 然后你可以从他们那里做一个未加入的选择,以获得所有行的交叉产品。

答案 2 :(得分:-1)

如果您觉得有价值的时间只需购买一种旨在提供此类功能的商业产品。

我对EMS Data Generator for SQL Server非常满意,价格低于100美元......

  

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