【问题标题】:SQL Server Select column based on where querySQL Server 根据where查询选择列
【发布时间】:2016-08-06 00:59:17
【问题描述】:

我可以根据 where 子句选择列吗?我在 SQL Server 2012 中有一个表,它有一个销售人员代码,所有十二个月都是数字格式(01=一月,02=二月,03=三月等)。这些行是销售数字的美元金额。

我希望能够从某个月份和销售人员代码中选择一行。我的逻辑基本上是 Select Amount from Table where Column = 07 and Code = 100。

所以基本上在下表中,我将如何选择三月行和销售人员代码 200(即 10006)。

+-----------------------------------+------------+ -------------+ |销售人员代码 |一月 |二月 |三月 |四月 |君 |等等……| +-----------------------------------+------------+ -------------+ | 100 |50003|13232|66565|65656|96656| ... | | 200 |65653|43432|10006|65236|23236| ... | | 300 |32131|43432|44343|56563|21212| ... | +-----------------------------------+------------+ -------------+

【问题讨论】:

  • 请发布您的表架构并说明您要执行的操作。我不明白。您是要动态定义要搜索的列,还是要搜索多个列?
  • 对不起 - 我添加了一个基本的表模式。我正在尝试动态定义要搜索的列。

标签: sql sql-server select where


【解决方案1】:

假设我理解您的问题,您有一个包含 salescode 列和 12 个附加列的表,每个月一个列,每个存储一个 amount,您想通过传入参数来显示?

如果是这样,这里有一个选项,每个月使用 case 语句:

select salescode, 
       case when @column = 1 then month1
            when @column = 2 then month2
            ...
            when @column = 12 then month12
       end as amount
from yourtable
where salescode = @salescode

【讨论】:

    【解决方案2】:

    你必须有不同的表:

    CREATE TABLE tbl_Sales(
    SalesPersonCode INT,
    Period SMALLINT,
    Value INT
    )
    GO
    

    要获得您展示的表格值,需要透视数据,但对于其他所有内容,提取会更容易/更快。像这样:

    SELECT Value FROM tbl_Sales
    WHERE SalesPersonCode = 100 and Period = 1607;
    

    【讨论】:

    • 我认为 OP 打算 Column = 07 表示“搜索第七列”,而不是与名为 Column 的特定列匹配。如果它这么简单,那么 OP 就可以运行该查询。
    • @Robert Columbia 你的水晶球比我的好,因为我没有。
    • 对不起,伙计们 - 我澄清了这个问题。直到现在我才弄清楚如何添加表架构。
    • 有没有办法保持表格格式不变?当我们将数据作为一个整体查看时,更容易直观地查看数据。
    • 是的。我只想保留一年的数据。如何选择某个月份和销售人员代码?
    猜你喜欢
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2018-06-07
    相关资源
    最近更新 更多