SQL In Access,将数据表转换为结构化数据表?

时间:2015-11-13 11:43:40

标签: sql ms-access-2013

我出于项目的目的使用Access表单和表格。我们有一个Access表单模板,可以在表单上更改,添加或删除某些内容时将数据发送到表(默认值)。表单将值存储在" DefaultValue"并用它更新表。基本上,它将数据发送到表中,在现场更新(如果需要),然后将其检索到" DefaultValue"所以我们可以用我们的形式工作。

表单数据进入表[Defaults],它有3列: FormName,ControlName和DefaultVal 。表单中的每个值都通过其[FormName]和[ControlName]在表中进行分类,两者都是主键。 我们多次使用具有不同表单名称的相同模板形式。模板中的表单字段名称相同。 [DefaultVal]具有Memo / LongText列格式。

  

示例:"默认值"中的一行读Form_Sample|Text224|Test。这意味着有一个名为" Form_Sample"用一个名为" Text224"的字段使用DefaultValue"测试"。

所以我的问题是,我想将数据从[Defaults]。[DefaultVal]提取到表格" Analysis"。该信息需要分为7列(由于分类的公司信息,我们称之为column1,2,3,4等)。要定义列#34; DefaultVal"中的哪些数据。进入Analysis的7列之一,需要使用[ControlName]列。由于我们的不同形式的表单字段名称是相同的,因此需要进一步分类,以便它们不会被覆盖。为了定义[DefaultVal]是否唯一,必须首先使用[FormName],然后才需要添加[ControlName]。

  

示例:如果您有一个表单中的Text224|Apple和另一个表单中的Text224|Orange,则会因相同的[ControlName]而覆盖。但是,如果我们使用两个主键并且Form1|Text224|AppleForm2|Text224|Orange,则它们将是唯一的。这就是我们的表如何定义是否应该覆盖[DefaultVal]中的值或者应该创建一个新值。 [DefaultVal]中的值会不断变化,可能会相同,因此我无法根据该列提取数据。

我需要[DefaultVal]中的特定值基于[FormName]在同一行上,并且基于[ControlName]在不同的列中。 表"分析"必须能够更新"默认值"并添加新的。

这就是我对查询的描述:

  

常规函数:查询可以识别[默认值]中是否有新行,并根据以下逻辑添加它们。查询可以识别[默认值]中的某些值是否有更改并相应地更新它们。

     
    

数据: Text1,Text2,Text3,Text4,Text5,Text6和Text7作为[ControlName]存在于[Defaults]中。它们在[DefaultVal]中都有一些价值。它们都是表格的一部分" Sample" [窗体名称]。所以他们的[FormName] | [ControlName] | [DefaultVal]在列Sample|Text1|Value中看起来像这样; Sample|Text2|Value2等;;;还有另一组Text1-7 [ControlName],但具有不同的[FormName]。 [DefaultValue]中的值可以相同也可以不同。

         
      

规则:查询知道" Text1"的[DefaultVal]值因为[ControlName]需要从表[Analysis]进入[Column1]。 Text2的值转到[Column2],Text3转到[Column3]等。

             
        

逻辑:查询接受Text1的两个值的实例,并希望将它们放在[Analysis]的[Column1]中。它们似乎有不同的[FormName],因此它将它们放在不同的行上。然后它接受Text2的两个值的实例,它看到它们有不同的[FormName],所以它想把它们放在不同的行上。它看到两个[FormName]都存在于Analysis中并将它们放在相应的行上。

      
    
  

我真的很抱歉,如果这太久了,我猜它是,但我不知道如何解释它。我对SQL查询有一些基本的了解,但这超出了我的理解,我甚至不知道使用什么命令以及在哪里。

有人可以帮忙吗? = /

INSERT INTO Analysis ([Control Name], [Control (Sub)-Section], [Control Objective], [Control Owner], [Branch Location], [Review Period], [Operating Effectiveness], [Conclusion and Recommendations])
SELECT Defaults.DefaultVal, Analysis.*
FROM Defaults as Def, Analysis as An
UNION ALL
On An.[Control Name] = Def.DefaultVal, An.[Control (Sub)-Section] = Def.DefaultVal, An.[Control Objective] = Def.DefaultVal, An.[Control Owner] = Def.DefaultVal, An.[Branch Location] = Def.DefaultVal, An.[Review Period] = Def.DefaultVal, An.[Operating Effectiveness] = Def.DefaultVal,  An.[Conclusion and Recommendations] = Def.DefaultVal
PIVOT Def.FormName
WHERE NOT EXISTS 
(
'SELECT * 
FROM Defaults as Def
WHERE Def.ControlName = "Text684", Def.ControlName = "Text688", Def.ControlName = "Text580", Def.ControlName = "Text473",  Def.ControlName = "Label548", Def.ControlName = "Label545", Def.ControlName = "Text925", Def.ControlName = "Text929"
PIVOT FormName'
)
ELSE
UPDATE Analysis
SET [Control Name], [Control (Sub)-Section], [Control Objective], [Control Owner], [Branch Location[, [Review Period], [Operating Effectiveness], [Conclusion and Recommendations] = 
(
'SELECT DefaultVal
FROM Defaults
WHERE Def.ControlName = "Text684", Def.ControlName = "Text688", Def.ControlName = "Text580", Def.ControlName = "Text473",  Def.ControlName = "Label548", Def.ControlName = "Label545", Def.ControlName = "Text925", Def.ControlName = "Text929"
PIVOT FormName'
)
;

0 个答案:

没有答案