SQL语句从另一个视图中的表返回数据

SQL语句从另一个视图中的表返回数据,sql,select,ms-access-2010,Sql,Select,Ms Access 2010,SQL语句如何从上表返回底部结果 钥匙上的最后一个字母应该去掉。它代表语言EXP列应拆分为5列,并带有语言前缀和正确的值 我在编写或多或少困难的SQL语句方面很弱,因此,如果有任何帮助,我将不胜感激 试试这样的方法: select * from ( select 'abcd' as [key], right([key], 1) as id, expression from table1 ) x pivot ( max(expression) for id in

SQL语句如何从上表返回底部结果

钥匙上的最后一个字母应该去掉。它代表语言
EXP
列应拆分为5列,并带有语言前缀和正确的值


我在编写或多或少困难的SQL语句方面很弱,因此,如果有任何帮助,我将不胜感激

试试这样的方法:

select *
from 
(
    select 'abcd' as [key], right([key], 1) as id, expression
    from table1
) x
pivot
(
    max(expression)
    for id in ([D], [E])
) p

试试这样的方法:

select *
from 
(
    select 'abcd' as [key], right([key], 1) as id, expression
    from table1
) x
pivot
(
    max(expression)
    for id in ([D], [E])
) p

Microsoft Access相当于SQL Server中的枢轴,称为交叉表。以下查询适用于Microsoft Access 2010

TRANSFORM First(table1.Exp) AS FirstOfEXP
   SELECT Left([KEY],Len([KEY])-2) AS [XKEY]
     FROM table1
 GROUP BY Left([KEY],Len([KEY])-2)
 PIVOT Right([KEY],1);
如果试图用KEY命名行标题,Access将抛出循环字段引用错误,因为这也是从中派生行标题的原始表字段的名称。如果不希望使用XKEY作为字段名,则需要将上述查询拆分为两个单独的查询,如下所示:

qsel_表1

选择Left([KEY],Len([KEY])-2)作为XKEY ,右([键],1)为[语言] ,表1.Exp 来自表1 按左([键]、长([键])-2)、右([键]、1)排序

qsel\u表1\u交叉表:

TRANSFORM First(qsel_table1.Exp) AS FirstOfEXP
   SELECT qsel_table1.XKEY AS [KEY]
     FROM qsel_table1
  GROUP BY qsel_table1.XKEY
  PIVOT qsel_table1.Language;
为了始终输出所有语言列,而不管是否有值,您需要将这些值添加到单独的表中。然后,该表将为交叉表提供行和列值,原始表将提供值表达式。使用上述两个查询解决方案,我们需要执行以下操作:

表2:

TRANSFORM First(qsel_table1.Exp) AS FirstOfEXP
   SELECT qsel_table1.XKEY AS [KEY]
     FROM qsel_table1
  GROUP BY qsel_table1.XKEY
  PIVOT qsel_table1.Language;
这是一个新表,包含一个BASE_KEY TEXT*255列和一个LANG TEXT*1列。这两列将一起定义主键。使用以下行填充此表:

AbstractItemNumberReportController。选择Positionen和D AbstractItemNumberReportController。选择Positionen和E AbstractItemNumberReportController。选择Positionen和F AbstractItemNumberReportController。选择Positionen和I AbstractItemNumberReportController。选择Positionen和X

qsel_表1:

TRANSFORM First(qsel_table1.Exp) AS FirstOfEXP
   SELECT qsel_table1.XKEY AS [KEY]
     FROM qsel_table1
  GROUP BY qsel_table1.XKEY
  PIVOT qsel_table1.Language;
此查询保持不变

qsel\u表1\u交叉表:

TRANSFORM First(qsel_table1.Exp) AS FirstOfEXP
   SELECT qsel_table1.XKEY AS [KEY]
     FROM qsel_table1
  GROUP BY qsel_table1.XKEY
  PIVOT qsel_table1.Language;
新表2通过与原始表1的外部联接添加到此查询中。外部联接将允许从表2中返回所有行,而不管表1中是否有匹配的行。表2现在提供了行标题和列标题的值

TRANSFORM First(qsel_table1.Exp) AS FirstOfEXP
   SELECT Table2.Base_KEY AS [KEY]
     FROM Table2 LEFT JOIN qsel_table1 ON (Table2.BASE_KEY = qsel_table1.XKEY) 
      AND (Table2.LANG = qsel_table1.Language)
  GROUP BY Table2.Base_KEY
  PIVOT Table2.LANG;

Microsoft Access相当于SQL Server中的PIVOT,称为交叉表。以下查询适用于Microsoft Access 2010

TRANSFORM First(table1.Exp) AS FirstOfEXP
   SELECT Left([KEY],Len([KEY])-2) AS [XKEY]
     FROM table1
 GROUP BY Left([KEY],Len([KEY])-2)
 PIVOT Right([KEY],1);
如果试图用KEY命名行标题,Access将抛出循环字段引用错误,因为这也是从中派生行标题的原始表字段的名称。如果不希望使用XKEY作为字段名,则需要将上述查询拆分为两个单独的查询,如下所示:

qsel_表1

选择Left([KEY],Len([KEY])-2)作为XKEY ,右([键],1)为[语言] ,表1.Exp 来自表1 按左([键]、长([键])-2)、右([键]、1)排序

qsel\u表1\u交叉表:

TRANSFORM First(qsel_table1.Exp) AS FirstOfEXP
   SELECT qsel_table1.XKEY AS [KEY]
     FROM qsel_table1
  GROUP BY qsel_table1.XKEY
  PIVOT qsel_table1.Language;
为了始终输出所有语言列,而不管是否有值,您需要将这些值添加到单独的表中。然后,该表将为交叉表提供行和列值,原始表将提供值表达式。使用上述两个查询解决方案,我们需要执行以下操作:

表2:

TRANSFORM First(qsel_table1.Exp) AS FirstOfEXP
   SELECT qsel_table1.XKEY AS [KEY]
     FROM qsel_table1
  GROUP BY qsel_table1.XKEY
  PIVOT qsel_table1.Language;
这是一个新表,包含一个BASE_KEY TEXT*255列和一个LANG TEXT*1列。这两列将一起定义主键。使用以下行填充此表:

AbstractItemNumberReportController。选择Positionen和D AbstractItemNumberReportController。选择Positionen和E AbstractItemNumberReportController。选择Positionen和F AbstractItemNumberReportController。选择Positionen和I AbstractItemNumberReportController。选择Positionen和X

qsel_表1:

TRANSFORM First(qsel_table1.Exp) AS FirstOfEXP
   SELECT qsel_table1.XKEY AS [KEY]
     FROM qsel_table1
  GROUP BY qsel_table1.XKEY
  PIVOT qsel_table1.Language;
此查询保持不变

qsel\u表1\u交叉表:

TRANSFORM First(qsel_table1.Exp) AS FirstOfEXP
   SELECT qsel_table1.XKEY AS [KEY]
     FROM qsel_table1
  GROUP BY qsel_table1.XKEY
  PIVOT qsel_table1.Language;
新表2通过与原始表1的外部联接添加到此查询中。外部联接将允许从表2中返回所有行,而不管表1中是否有匹配的行。表2现在提供了行标题和列标题的值

TRANSFORM First(qsel_table1.Exp) AS FirstOfEXP
   SELECT Table2.Base_KEY AS [KEY]
     FROM Table2 LEFT JOIN qsel_table1 ON (Table2.BASE_KEY = qsel_table1.XKEY) 
      AND (Table2.LANG = qsel_table1.Language)
  GROUP BY Table2.Base_KEY
  PIVOT Table2.LANG;

谢谢,这适用于MS T-Sql:),但我需要它用于MS Access 2010 Sql。。。尝试该语句会出现语法错误请参阅此链接..谢谢,这适用于MS T-Sql:),但我需要用于MS Access 2010 Sql的语法错误。。。尝试该语句会出现语法错误。请参阅此链接。@GordThompson的可能重复项不是重复项。我尝试创建access sql来解决我的问题,现在已经有5个小时了。即使在链接的“帮助”下,我也无法解决它。@GordThompson的可能副本不是副本。我尝试创建access sql来解决我的问题,现在已经有5个小时了。即使有链接的“帮助”,我也无法解决它。非常感谢,它很有效。只有一件事我忘了提。有时缺少一种语言。但无论如何,应该返回该行。因此,如果在我开始的屏幕截图中缺少“意大利语”
Articolo scelto
(KEY和EXP),那么sql语句应该返回包含空单元格的行。所以它看起来像是:在答案中添加了关于您的附加规范的附加解释。非常感谢,它是有效的。只有一件事我忘了提。有时缺少一种语言。但无论如何,应该返回该行。因此,如果在我开始的屏幕截图中缺少“意大利语”
Articolo scelto
(KEY和EXP),那么sql语句应该返回包含空单元格的行。s