Sql server 具有附加列的视图,该列将附加到零填充id

Sql server 具有附加列的视图,该列将附加到零填充id,sql-server,tsql,Sql Server,Tsql,我创建了下表(tb_公司): 下一步是创建从tb_company派生的视图,其中“id”列和“companyName”列连接为“id_和_companyName”,如下所示: 所有这些的问题是,我在sharepoint应用程序上使用视图表,当我显示数据时,它会按以下方式排序: 基本上这是一个字符/字母顺序,但这不是我想要实现的 我想在“id_and_companyName”列中添加一些字符串前的字符,这样我就可以得到这样的东西 如何通过TSQL脚本实现这一点?我想用这样的列创建一个视图。

我创建了下表(tb_公司):

下一步是创建从tb_company派生的视图,其中“id”列和“companyName”列连接为“id_和_companyName”,如下所示:

所有这些的问题是,我在sharepoint应用程序上使用视图表,当我显示数据时,它会按以下方式排序:

基本上这是一个字符/字母顺序,但这不是我想要实现的

我想在“id_and_companyName”列中添加一些字符串前的字符,这样我就可以得到这样的东西

如何通过TSQL脚本实现这一点?我想用这样的列创建一个视图。 这样我就可以解决排序问题


谢谢。

您可以将一个数字归零,如so
RIGHT('00000'+CAST(id为VARCHAR),5)

您可以将数字归零,如so
RIGHT('00000'+CAST(id为VARCHAR),5)

您可以将数字归零,如so
RIGHT('00000'+CAST(id为VARCHAR),5)

您可以将数字归零,如so
RIGHT('00000'+CAST(id为VARCHAR),5)

根据您的问题,我假设您的
id
值不会超过4位。如果是这样的话:

CREATE VIEW dbo.myview AS
  SELECT id, companyName, 
    id_and_companyName = RIGHT(REPLICATE('0',4) + CONVERT(VARCHAR(4),id),4)
    + ' ' + companyName
  FROM dbo.tablename;
否则,将
4
的实例增加到其他实例。另外,请确保不要麻烦将您的
orderby
子句与视图定义本身一起存储;在引用视图的查询中指定顺序

您也可以考虑将它作为一个计算列,而不是在视图中计算它。这给了你其他的机会来决定何时进行计算;在存储时或查询时。例如,您可以对列进行持久化和/或索引

最后,如果这只是为了分类,我不知道你为什么不能说:

ORDER BY id, companyName;
或者,如果由于某种原因,
id
当前是字符串数据类型,则可以更改该类型,或者使用:

ORDER BY CONVERT(INT,id), companyName;

如果你有坏数据,这可能会中断(更有理由修复它)。

根据你的问题,我假设你的
id
值不会超过4位。如果是这样的话:

CREATE VIEW dbo.myview AS
  SELECT id, companyName, 
    id_and_companyName = RIGHT(REPLICATE('0',4) + CONVERT(VARCHAR(4),id),4)
    + ' ' + companyName
  FROM dbo.tablename;
否则,将
4
的实例增加到其他实例。另外,请确保不要麻烦将您的
orderby
子句与视图定义本身一起存储;在引用视图的查询中指定顺序

您也可以考虑将它作为一个计算列,而不是在视图中计算它。这给了你其他的机会来决定何时进行计算;在存储时或查询时。例如,您可以对列进行持久化和/或索引

最后,如果这只是为了分类,我不知道你为什么不能说:

ORDER BY id, companyName;
或者,如果由于某种原因,
id
当前是字符串数据类型,则可以更改该类型,或者使用:

ORDER BY CONVERT(INT,id), companyName;

如果你有坏数据,这可能会中断(更有理由修复它)。

根据你的问题,我假设你的
id
值不会超过4位。如果是这样的话:

CREATE VIEW dbo.myview AS
  SELECT id, companyName, 
    id_and_companyName = RIGHT(REPLICATE('0',4) + CONVERT(VARCHAR(4),id),4)
    + ' ' + companyName
  FROM dbo.tablename;
否则,将
4
的实例增加到其他实例。另外,请确保不要麻烦将您的
orderby
子句与视图定义本身一起存储;在引用视图的查询中指定顺序

您也可以考虑将它作为一个计算列,而不是在视图中计算它。这给了你其他的机会来决定何时进行计算;在存储时或查询时。例如,您可以对列进行持久化和/或索引

最后,如果这只是为了分类,我不知道你为什么不能说:

ORDER BY id, companyName;
或者,如果由于某种原因,
id
当前是字符串数据类型,则可以更改该类型,或者使用:

ORDER BY CONVERT(INT,id), companyName;

如果你有坏数据,这可能会中断(更有理由修复它)。

根据你的问题,我假设你的
id
值不会超过4位。如果是这样的话:

CREATE VIEW dbo.myview AS
  SELECT id, companyName, 
    id_and_companyName = RIGHT(REPLICATE('0',4) + CONVERT(VARCHAR(4),id),4)
    + ' ' + companyName
  FROM dbo.tablename;
否则,将
4
的实例增加到其他实例。另外,请确保不要麻烦将您的
orderby
子句与视图定义本身一起存储;在引用视图的查询中指定顺序

您也可以考虑将它作为一个计算列,而不是在视图中计算它。这给了你其他的机会来决定何时进行计算;在存储时或查询时。例如,您可以对列进行持久化和/或索引

最后,如果这只是为了分类,我不知道你为什么不能说:

ORDER BY id, companyName;
或者,如果由于某种原因,
id
当前是字符串数据类型,则可以更改该类型,或者使用:

ORDER BY CONVERT(INT,id), companyName;

如果您的表中有不正确的数据,则可能会出现这种情况(更需要修复)。

…是的,仅使用id对表进行排序是可行的,但我的目标是在sharepoint中只显示一列。使用id列,我被迫显示“id”和“companyName”列。显示这两列的唯一方法是将它们连接起来,因为连接会创建一个字符串,sharepoint将根据该字符串对其进行排序。也就是说,您的附加填充字符串解决方案是最好的选择。是的,仅使用id对表进行排序是可行的,但我的目标是在sharepoint中只显示一列。使用id列,我被迫显示“id”和“companyName”列。显示这两列的唯一方法是将它们连接起来,因为连接会创建一个字符串,sharepoint将根据该字符串对其进行排序。也就是说,您的附加填充字符串解决方案是最好的选择。是的,仅使用id对表进行排序是可行的,但我的目标是在sharepoint中只显示一列。使用id列,我被迫显示“id”和“companyName”列。显示这两个列的唯一方法是连接它们,因为concatenaio