【问题标题】:want sql query which give me name of the column which contain particular data想要 sql 查询,它给我包含特定数据的列的名称
【发布时间】:2012-01-11 20:28:26
【问题描述】:

我有五列数据类型为int。我已经根据主键选择了行,但是现在在这一行中,我想选择名称小于结果列的某个 int 值的特定列。

USE [MedicalLabDB]

GO

/****** Object: Table [dbo].[Advance_Sub_Tests] Script Date: 01/11/2012 15:33:11 ******/
SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON GO

CREATE TABLE [dbo].[Advance_Sub_Tests]
  (
     [Advance_Sub_Test_ID]           [INT] IDENTITY(1, 1) NOT NULL,
     [Sub_Test_ID]                   [INT] NULL,
     [L_Bound_M_LessThan_First_Age ] [FLOAT] NULL,
     [U_Bound_M_LessThan_First_Age ] [FLOAT] NULL,
     [L_Bound_M_LessThan_Second_Age] [FLOAT] NULL,
     [U_Bound_M_LessThan_Second_Age] [FLOAT] NULL,
     [L_Bound_M_LessThan_Third_Age]  [FLOAT] NULL,
     [U_Bound_M_LessThan_Third_Age]  [FLOAT] NULL,
     [L_Bound_M_LessThan_Fourth_Age] [FLOAT] NULL,
     [U_Bound_M_LessThan_Fourth_Age] [FLOAT] NULL,
     [L_Bound_M_LessThan_Fifth_Age]  [FLOAT] NULL,
     [U_Bound_M_LessThan_Fifth_Age]  [FLOAT] NULL,
     [L_Bound_F_LessThan_First_Age]  [FLOAT] NULL,
     [U_Bound_F_LessThan_First_Age]  [FLOAT] NULL,
     [L_Bound_F_LessThan_Second_Age] [FLOAT] NULL,
     [U_Bound_F_LessThan_Second_Age] [FLOAT] NULL,
     [L_Bound_F_LessThan_Third_Age]  [FLOAT] NULL,
     [U_Bound_F_LessThan_Third_Age]  [FLOAT] NULL,
     [L_Bound_F_LessThan_Fourth_Age] [FLOAT] NULL,
     [U_Bound_F_LessThan_Fourth_Age] [FLOAT] NULL,
     [L_Bound_F_LessThan_Fifth_Age]  [FLOAT] NULL,
     [U_Bound_F_LessThan_Fifth_Age]  [FLOAT] NULL,
     [First_Age]                     [INT] NULL,
     [Second_Age]                    [INT] NULL,
     [Third_Age]                     [INT] NULL,
     [Fourth_Age]                    [INT] NULL,
     [Fifth_Age]                     [INT] NULL,
     [Test_Active]                   [BIT] NULL,
     [Version]                       [TIMESTAMP] NULL,
     CONSTRAINT [PK_Advance_Sub_Test_1] PRIMARY KEY CLUSTERED (
     [Advance_Sub_Test_ID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
  )
ON [PRIMARY]  

我有那个表,我想选择列名(在第一年龄、第二年龄、第三年龄、第四年龄、第五年龄之间),它的值让假设

【问题讨论】:

  • “名称小于某个 int 值的特定列”,这是什么意思?
  • 样本数据和预期输出将有助于了解您想要什么。
  • 您是否考虑过对其进行重组以消除明显的重复组? (即将所有 Age 内容移到另一个表中,并将其表示为 5 行而不是跨列)

标签: sql-server-2005


【解决方案1】:

如果我理解正确,您需要一个列名作为结果。

试试这个:

select top(1) Age.ColumnName
from Advance_Sub_Tests as AST
  cross apply (
               select 1, 'First_Age',  AST.First_Age  union all
               select 2, 'Second_Age', AST.Second_Age union all
               select 3, 'Third_Age',  AST.Third_Age  union all
               select 4, 'Fourth_Age', AST.Fourth_Age union all
               select 5, 'Fifth_Age',  AST.Fifth_Age
              ) as Age(Sortorder, ColumnName, ColumnValue)
where AST.Advance_Sub_Test_ID = 1 and 
      Age.ColumnValue < 20
order by Age.Sortorder

【讨论】:

  • 如果我只想使用结果值中的第一列,那么我该怎么办
  • @user1023160 - 添加一列以按顺序使用并执行select top(1)。更新了答案。
猜你喜欢
  • 1970-01-01
  • 2020-08-30
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多