/ / Formatando listas de links usando TSQL - sql-server, tsql

Formatando listas de links usando TSQL - sql-server, tsql

O Shog9 continua fazendo minhas listas de links parecerem incríveis.

Essencialmente, eu escrevo um monte de consultas que extraem resultados do despejo de dados Stackoverflow. No entanto, minhas listas de links parecem muito feias e são difíceis de entender.

Usando alguma magia de formatação, o Shog9 consegue fazer as listas de links parecerem muito mais agradáveis.

Então, por exemplo, vou escrever uma consulta que retorna o seguinte:

id da pergunta, título, id do usuário, outras informações 4, Ao definir a opacidade de um formulário, devo usar um decimal ou duplo?, 8, Ovos McLaren, algumas outras coisas muito texto

E eu quero colá-lo em uma resposta no meta e torná-lo parecido com este:

ID da pergunta Nome do usuário - Outras informações

Ao definir a opacidade de um formulário ...  Ovos Mclaren   Algumas outras coisas ...

Portanto, supondo que meu ponto de partida seja a consulta que retorna as informações iniciais.

Quais são as etapas mínimas que posso executar no analisador de consulta para transformar os resultados em:

<h3>&nbsp;&nbsp;Question Id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Other Info </h3>
<pre>
<a href="https://stackoverflow.com/questions/4">When setting a form’s opacity...</a>  <a href="https://stackoverflow.com/users/8/eggs-mclaren">Eggs Mclaren</a>   Some other stuff...
</pre>

Minha ideia inicial é inserir os resultados em uma tabela temporária e, em seguida, executar um procedimento armazenado que irá transferir os dados para a estrutura desejada. Execute o proc, corte e cole e pronto.

Alguma solução baseada em TSQL candidata para este problema?

EDIT: Aceitando minha resposta, é a única solução com uma implementação.

Respostas:

2 para resposta № 1

Não tem certeza de seus requisitos exatos, mas você considerou selecionar os dados como XML e, em seguida, aplicar uma transformação XSLT aos resultados?


1 para resposta № 2

Vou atualizar esta postagem com meu progresso à medida que refino meu procedimento:

Exemplo:

select top 20
UserId = u.Id,
UserName = u.DisplayName,
u.Reputation,
sum(case when p.ParentId is null then 1 else 0 end) as Questions,
sum(case when p.ParentId is not null then 1 else 0 end) as Answers
into #t
from Users u
join Posts p on p.OwnerUserId = u.Id
where p.CommunityOwnedDate is null and p.ClosedDate is null
group by u.Id, u.DisplayName, u.Reputation
having sum(case when p.ParentId is not null then 1 else 0 end) < sum(case when p.ParentId is null then 1 else 0 end) / 6
order by Reputation desc

exec spShog9

Resultados:

Reputação do usuário Perguntas e Respostas

Edward Tanguay 8317 465 24
mim             5767 311 29
Joan Venge     4844 226 14
Blankman       4546 310 1
acidzombie24   4359 371 32
obrigado         4350 416 21
Masi           4193 555 74
Rapaz preguiçoso        3230 94  12
KingNestor     3187 92  11
usuario           2084 79  6
George2        1973 263 1
Xaisoft        1944 174 12
John           1929 160 24
danmine        1901 53  3
zsharp         1771 145 16
transportadora        1742 56  8
JC Grubbs      1550 50  5
vg1890         1534 56  2
Coocoo4Cocoa   1514 143 0
Keand64        1513 83  5
Masi           4193 555 74
Rapaz preguiçoso        3230 94  12
KingNestor     3187 92  11
usuario           2084 79  6
George2        1973 263 1
Xaisoft        1944 174 12
John           1929 160 24
danmine        1901 53  3
zsharp         1771 145 16
transportadora        1742 56  8
JC Grubbs      1550 50  5
vg1890         1534 56  2
Coocoo4Cocoa   1514 143 0
Keand64        1513 83  5

O proc está na essência: http://gist.github.com/165544


0 para resposta № 3

Você poderia fazer algo como:

with
data (question_id,title,user_id, username ,other_info) as
(
select 4,"When setting a form""s opacity should I use a decimal or double?",8,"Eggs McLaren", "some other stuff lots of text"
union all
select 5,"Another q title",9,"OtherUsername", "some other stuff lots of text")
select
(select "http://stackoverflow.com/questions/" + cast(question_id as varchar(10)) as [@href], title as [*] for xml path("a")) as questioninfo
,(select "http://stackoverflow.com/users/" + cast(user_id as varchar(10)) + "/" + replace(username, " ", "-") as [@href], username as [*] for xml path("a")) as userinfo
, other_info
from data

... mas veja como você vai. Pessoalmente, acho que FOR XML PATH é muito poderoso para obter resultados marcados da maneira que me convém.

Roubar