透视这个的语法是什么?

时间:2018-05-08 16:00:47

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

我想从临时表中获取一组列作为行。以下内容:

function check() {
  var q1 = document.myform.q1.value;
  var q2 = document.myform.q2.value;
  
  var divResult = document.getElementById("resultMessage");

  if (q1 == "a" && q2 == "a") {
    divResult.innerHTML = "Green!";
  }
  if (q1 == "a" && q2 == "b") {
    divResult.innerHTML = "Red!";
  }
  if (q1 == "b" && q2 == "a") {
    divResult.innerHTML = "Yellow!";
  }
  if (q1 == "b" && q2 == "b") {
    divResult.innerHTML = "Blue!";
  }
}

产生类似

的东西
<!DOCTYPE html>
<html>

  <head>
    <title>Food Quiz</title>
  </head>

  <body>
    <form name="myform" method="post">
      <label for="q1">Question 1: Question...?</label>
      <input type="radio" name="q1" value="a"> Answer A </br>
      <input type="radio" name="q1" value="b"> Answer B </br>
      </br>


      <label for="q2">Question 2: Question...?</label>
      <input type="radio" name="q2" value="a"> Answer A </br>
      <input type="radio" name="q2" value="b"> Answer B </br>
      </br>
      </br>
      </br>
      </br>
      </br>
      <input type="submit" value="submit" onclick="check(); return false;">
      </br>
      </br>
    </form>

    <p>
      Results:
    </p>
    </br>
    <div style="background-color:lightblue" id="resultMessage" name="answer">
    </div>

  </body>

</html>

我可以将其转换为获取 select name from tempdb.sys.columns where object_id = object_id('tempdb..##myTempTable') ?在列中,不是单个值。

我提前不知道列的名称。

2 个答案:

答案 0 :(得分:1)

没有单一的语法会以这种方式转动这些数据。

SQL语言(对于任何数据库)具有公司要求,您知道在查询编译时中结果中每列的数量和类型。这是数据库引擎确定正确权限和计算执行计划所必需的。即使SELECT *查询也满足此要求,因为查询使用的表中列的数量和类型是固定且已知的(至少在单个查询的生命周期内)。

这个问题要求做什么打破了这个要求。列标题由数据确定,因此数据库引擎无法知道结果需要多少列,直到查询开始执行之后。

解决此问题的唯一方法是将查询分为三个单独的步骤:

  1. 运行更简单的查询以确定最终结果的列标题。
  2. 使用#1中的结果即时构建新的SQL字符串
  3. 执行#2中的查询并将其结果返回给用户。

答案 1 :(得分:-1)

 declare @cols varchar(max)=''
 declare @query varchar(max)
 select @cols=''''+name+''','+@cols from tempdb.sys.columns 
 where object_id = object_id('tempdb..##myTempTable')

 select @cols=left(@cols,len(@cols)-1)

set @query= 'select ' + @cols 

execute(@query)

如果您需要名称列,请更改此行

 select @cols=''''+name+''''+ name  +','+@cols from  sys.columns 
  where object_id = object_id('hrc.dbo.car')