【问题标题】:Show One Column Data as Two Columns in SQL在 SQL 中将一列数据显示为两列
【发布时间】:2015-01-23 06:02:38
【问题描述】:

我已将语言字符串资源保存在表格中。这些被保存为每个文化代码的行明智 如下图:

 ---------------------------------------------
  CULTURE      KEYFIELD                 VALUEFIELD
 ----------------------------------------------

   en-US       AadhaarUID              Aadhaar UID
   en-US       Abbreviation            Abbreviation
   en-US       Abbreviation_CD         Abbreviation
   en-US       Abbreviation_DM         Abbreviation
   en-US       AboutPortal             About Portal
   hi-IN       AadhaarUID              आधार यूआईडी नंबर लिखें
   hi-IN       Abbreviation            संक्षिप्त
   hi-IN       Abbreviation_CD         संक्षिप्त
   hi-IN       Abbreviation_DM         संक्षिप्त
   hi-IN       AboutPortal             पोर्टल के बारे में

我想将ValueField 列显示为两列,一列用于英语,另一列用于印地语。每种区域性的行数将相等。PFFIELD 将仅来自 hi-IN

表示输出应为:

   -------------------------------------------------------
     PKFIELD   ENGLISH                         HINDI
    ------------------------------------------------------
        2       Aadhaar UID                 आधार यूआईडी नंबर लिखें
        4       Abbreviation                 संक्षिप्त
        6       Abbreviation                 संक्षिप्त
        8       Abbreviation                 संक्षिप्त
        10       About Portal                  पोर्टल के बारे में

如何在 SQL 中执行此操作?

谢谢

【问题讨论】:

  • 你的意思是PKFIELD 仅来自hi-IN
  • 意味着..当我在表中显示结果时。我只需要编辑hi-IN 值..en-US 将是只读的。要编辑hi-IN 我需要他们的_PK 字段
  • 请查看更新后的答案。

标签: sql-server sql-server-2008 tsql sql-server-2008-r2 sql-server-2012


【解决方案1】:

试试这个:

SELECT
    PKField = MAX(CASE WHEN Culture = 'hi-IN' THEN PKField END),
    English = MAX(CASE WHEN Culture = 'en-US' THEN ValueField END),
    Hindi = MAX(CASE WHEN Culture = 'hi-IN' THEN ValueField END) 
FROM temp
GROUP BY KeyField

【讨论】:

  • 谢谢。我需要再显示一个字段,即PrimaryKeyFieldPrimaryKeyField 将仅来自“hi-IN”我该怎么做?
【解决方案2】:

为了更好地衡量,您还可以进行旋转 - 这对于更多的语言会更有用:

SELECT [KEYFIELD], [en-US], [hi-IN]
FROM Abbreviations
PIVOT
(
  MAX([VALUEFIELD])
  FOR [CULTURE] IN ([en-US], [hi-IN])
) y;

SqlFiddle here

【讨论】:

    【解决方案3】:
    SELECT  [English] = E.[ValueFiled]
            ,[Hindi] = H.[ValueFiled]
    FROM    [TableName] E
    INNER JOIN (SELECT * FROM [TableName] H WHERE H.[Culture] = 'hi-IN') H
            ON E.[KeyField] = H.[KeyField]
    WHERE   E.[Culture] = 'en-US'
    

    【讨论】:

      【解决方案4】:
      select a.valuefield as "ENGLISH", b.valuefield as "HINDI"
      from tab a, tab b
      where
          a.keyfield = b.keyfield
          and a.culture = 'en-US'
          and b.culture = 'hi-IN'
      ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-22
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多