Toon posts:

SQL Server 2000, view bouwen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik krijg een tabel aangeleverd met kolommen country en _c2_ t/m _c13_.
Deze wil ik onderling samenvoegen tot strings zodat een soortgelijk resultaat wordt bereikt:

Country surv90 surv1 surv2 surv3
1 "99.5 (85.2 - 65.2)" "45.6 (15.7 - 82.6)" "54.6 (54.6 - 45.1)" "15.4 (87.9 - 97.4)"

Quotes toegevoegd om duidelijkheid te scheppen

De query die ik gebruik is de volgende:
code:
1
2
3
4
5
6
7
SELECT     TOP 100 PERCENT Country,
 _c2_ + N' (' + _c3_ + N' - ' + _c4_ + N') ' AS surv90,
 _c5_ + N' (' + _c6_ + N' - ' + _c7_ + N') ' AS surv1, 
 _c8_ + N' (' + _c9_ + N' - ' + _c10_ + N') ' AS surv2,
 _c11_ + N' (' + _c12_ + N' - ' + _c13_ + N') ' AS surv5
FROM         dbo.A501
ORDER BY Country


Maar die werkt alleen als de velden alfanumeriek zijn (bijv. nvarchar) en mijn velden zijn decimal. Ik kan de velden wel omzetten, maar ik heb 32 tabellen, en het grote risico dat ze alsnog nieuwe waardes in de tabellen willen zetten, en daar moet het decimal voor zijn.

Kan ik in de query aanpassingen maken dat hij decimal naar string parsing wel accepteert? (of is er een snelle stored procedure die ik kan maken zodat ik de velden automatisch van nvarchar naar decimal kan zetten en terug?)

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:58
Ik snap het probleem niet goed.
Als je een view op die tabel maakt, dan kan je toch de gegevens er zo uittrekken zoals jij dat wilt?
Je kan dan ook nog altijd gegevens in de tabel inserten door een insert op de tabel zelf te doen, of een INSTEAD OF trigger te maken op de view.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik heb het antwoord al gevonden hier:

http://www.databasejourna...mssql/article.php/1469921

Je kunt namelijk niet zomaar een getal naar string forceren maar daar is een cast voor nodig:

code:
1
2
3
4
5
6
7
8
SELECT     TOP 100 PERCENT dbo.columns.columtitle, LTRIM(STR(dbo.A501._c2_, 25, 1)) + N' (' + LTRIM(STR(dbo.A501._c3_, 25, 1)) 
                      + N' - ' + LTRIM(STR(dbo.A501._c4_, 25, 1)) + N') ' AS surv90, LTRIM(STR(dbo.A501._c5_, 25, 1)) + N' (' + LTRIM(STR(dbo.A501._c6_, 25, 1)) 
                      + N' - ' + LTRIM(STR(dbo.A501._c7_, 25, 1)) + N') ' AS surv1, LTRIM(STR(dbo.A501._c8_, 25, 1)) + N' (' + LTRIM(STR(dbo.A501._c9_, 25, 1)) 
                      + N' - ' + LTRIM(STR(dbo.A501._c10_, 25, 1)) + N') ' AS surv2, LTRIM(STR(dbo.A501._c11_, 25, 1)) + N' (' + LTRIM(STR(dbo.A501._c12_, 25, 1)) 
                      + N' - ' + LTRIM(STR(dbo.A501._c13_, 25, 1)) + N') ' AS surv5
FROM         dbo.A501 INNER JOIN
                      dbo.columns ON dbo.A501.col = dbo.columns.columnnumber
ORDER BY dbo.columns.columnnumber