【问题标题】:SQL: I would like to replace a building number with its proper nameSQL:我想用正确的名称替换建筑物编号
【发布时间】:2016-10-07 22:14:51
【问题描述】:

我有一个兽医 SQL 服务器,我正在使用 ASP.NET 中的 SSMS 构建一个存储过程。我有一个有效的 SQL 查询,可以获取两个日期之间的所有临床病例:

USE [vetDatabase_Wizard]
GO
ALTER PROCEDURE sp_GetNewCases (@startDate datetime, @endDate datetime)
AS
BEGIN 
    SELECT caseID,building FROM tblCases
    WHERE dateOpened BETWEEN @startDate and @endDate
END
GO
EXEC sp_GetNewCases '2015-01-01', '2015-08-30'

感谢在线社区,它正在运行! :)

这是输出:

caseID   building
1        3
2        3
3        2
...

当我开始学习如何制作 SQL 数据库时,有人告诉我,最好将建筑物名称与相应的编号一起存储以节省存储空间。例如,tblBuildings:

buildingID     name
1              GSC
2              RVH
3              MMD
...

我有 7 个建筑物名称。我想修改上面的存储过程,以便可以将输出(JSON 格式)与一些 javascript 数据可视化库一起使用:

caseID         name
1              MMD
2              MMD
3              RVH
...

非常感谢您的帮助!

【问题讨论】:

  • 你同时混合几个问题。您是在询问数据库设计、存储过程、json 还是 asp?尽量具体,否则太宽泛,无法回答。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。

标签: javascript sql asp.net stored-procedures


【解决方案1】:

首先您应该将 tblCases 字段名称 building 更改为 building_id 以便与您的其他表保持一致。

然后将两个表连接在一起,这样您就可以返回building_name,如果不需要,您可以从结果中删除building_id

BEGIN 
    SELECT C.caseID, B.building_id, B.Name 
    FROM tblCases C
    JOIN tblBuilding B
      ON C.building_id = B.building_id
    WHERE dateOpened BETWEEN @startDate and @endDate
END

【讨论】:

  • 嗨!非常感谢您的帮助!我学到了新东西! :D 此外,我会小心提出更好的问题。我不知道我们可以使用字母(即 B、C)以如此灵活的方式识别字段。我也想问你:我不需要写 C.dateOpened 因为我们提到了“FROM tblCases”,对吧?
  • 您应该写C.dateOpened 以使您的代码对下一个人更具可读性。但你不必。在 building_id 的情况下,您 必须 因为 db 不知道您指的是这两个中的哪一个并且会模棱两可。这称为Alias,您也可以对表或字段名这样做。
猜你喜欢
  • 2013-12-04
  • 2022-11-11
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多